Goのコンストラクタ 質問する

Goのコンストラクタ 質問する

構造体があり、それを適切なデフォルト値で初期化したいと考えています。

通常、ここで行うべきことはコンストラクターを使用することですが、Go は従来の意味での OOP ではないため、これらは真のオブジェクトではなく、コンストラクターはありません。

init メソッドに気付きましたが、これはパッケージ レベルのものです。構造体レベルで使用できる同様のメソッドは他にありますか?

そうでない場合、Go でこの種のことに対して受け入れられているベスト プラクティスは何ですか?

ベストアンサー1

ゼロ値が適切なデフォルト値を生成できない場合、または構造体の初期化に何らかのパラメータが必要な場合のために、コンストラクターに相当するものがいくつかあります。

次のような構造体があるとします。

type Thing struct {
    Name  string
    Num   int
}

NewThingゼロ値が適合しない場合は、通常、ポインターを返す関数を使用してインスタンスを構築します。

func NewThing(someParameter string) *Thing {
    p := new(Thing)
    p.Name = someParameter
    p.Num = 33 // <- a very sensible default value
    return p
}

構造体が十分に単純な場合は、次の凝縮された構造を使用できます。

func NewThing(someParameter string) *Thing {
    return &Thing{someParameter, 33}
}

ポインタを返したくない場合は、makeThing代わりに関数を呼び出すのが慣例ですNewThing

func makeThing(name string) Thing {
    return Thing{name, 33}
}

参照 :効果的なGoでのnewによる割り当て

おすすめ記事