Go での構造体初期化のコンストラクター パターン
Golang 構造体を使用する場合、メンバーの初期化は、特に初心者にとっては少し難しい場合があります。よくある問題の 1 つは、初期化されていないフィールドにアクセスするときに nil ポインター パニックが発生することです。
これに対処するための一般的なアプローチは、初期化に別の関数を使用することです。 SyncMap を使用した例では、new を使用して構造体を作成した後、hm フィールドと lock フィールドを手動で初期化する Init() 関数を作成する必要がありました。
ただし、Go で構造体の初期化を処理するよりエレガントな方法があります。 : コンストラクターを使用します。コンストラクターは、構造体のインスタンスを作成し、そのすべてのメンバーを初期化するために必要なパラメーターを受け取る関数です。
SyncMap の例では、次のようにコンストラクターを定義できます。
func NewSyncMap() *SyncMap { return &SyncMap{hm: make(map[string]string)} }
このコンストラクターは新しい SyncMap 構造体を作成し、hm フィールドを空のマップに初期化し、そのマップへのポインターを返します。 struct.
これで、手動による初期化を必要とせずに、NewSyncMap() を使用するだけで初期化された SyncMap インスタンスを作成できるようになります。
sm := NewSyncMap() sm.Put("Test", "Test")
このコンストラクター パターンは、より複雑な処理を処理するために拡張できます。バックグラウンドゴルーチンの開始やファイナライザーの登録などの初期化シナリオ:
func NewSyncMap() *SyncMap { sm := SyncMap{ hm: make(map[string]string), foo: "Bar", } runtime.SetFinalizer(sm, (*SyncMap).stop) go sm.backend() return &sm }
コンストラクターを使用することで、追加のボイラープレート コードを必要とせず、また nil ポインター パニックが発生するリスクもなく、Go 構造体が常に適切に初期化され、使用できる状態にあることを保証できます。
以上がコンストラクターはどのようにして Go 構造体の初期化を改善し、Nil ポインター パニックを防ぐことができるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。