The idiom used in the standard Go library:
package bar
package bar
import (
"fmt"
)
type Bar struct {
a string
b string
}
func New(baz string) *Bar {
return &Bar{a: baz, b: baz + baz}
}
func (b *Bar) BzzBar() {
fmt.Println(*b)
}
package main
package main
import (
"bar"
)
func main() {
x := bar.New("sad")
x.BzzBar()
}
Conclusion:
{sad sadsad}
ADDITION:
Go programming language specification
Zero value
, make , , . : false booleans, 0 , 0.0 float, "" nil , , , , . , , , , .
, Go, , . , new , false.
type Bar struct {
new bool
a string
b string
}
,
package bar
import (
"fmt"
)
type Bar struct {
new bool
a string
b string
}
func New(baz string) *Bar {
return &Bar{new: true, a: baz, b: baz + baz}
}
func (b *Bar) notnew() {
if b == nil || !b.new {
panic("bar.Bar not bar.New")
}
}
func (b *Bar) Bzz() {
b.notnew()
fmt.Println(*b)
}
.
package main
import (
"bar"
)
func main() {
x := bar.New("sad")
x.Bzz()
}
:
{true sad sadsad}