Go言語のコンストラクタは以下のように書くことが推奨されています。
http://play.golang.org/p/oM5C26l8iw
package main
import "fmt"
type Person struct {
Name string
Age int
}
func NewPerson (name string, age int) *Person {
if age < 0 {
return nil
}
p := new(Person)
p.Name = name
p.Age = age
return p
}
func main() {
taro := NewPerson("Taro", 26)
fmt.Printf("name: %s age: %d", taro.Name, taro.Age)
}
NewPersonは構造体の初期化を使って以下のように記述することもできます。
func NewPerson (name string, age int) *Person {
if age < 0 {
return nil
}
p := Person{name, age}
return &p
}
Cに慣れた人にしてみるとローカル変数のポインタを返すことに違和感があるかもしれませんが、メモリ領域は呼ぶ度に新たに確保されます。
- Effective Go – Constructors and composite literals
http://golang.org/doc/effective_go.html#composite_literals