埋め込み構造体は Go に大きな利点をもたらしますが、特に初期化中に特有の課題が生じることがあります。次のシナリオを考えてみましょう。匿名の内部構造体を含む構造体は、内部構造体の既存のインスタンスを使用して初期化する必要があります。
type MyRequest struct { Request http.Request PathParams map[string]string } func New(origRequest *http.Request, pathParams map[string]string) *MyRequest { // How to initialize "Request" field with "origRequest"? }
この問題に対処するには、実行可能な 2 つの方法があります。オプション:
オプション1:
req := new(MyRequest) req.PathParams = pathParams req.Request = *origRequest
このアプローチでは、MyRequest の新しいインスタンスが new を使用して作成されます。 PathParams フィールドは、提供された pathParams マップで初期化されます。匿名の内部構造体リクエストは、origRequest の参照解除された値を明示的に割り当てることによって初期化されます。
オプション 2:
req := &MyRequest{ PathParams: pathParams, Request: origRequest, }
この代替案このアプローチでは、複合リテラル構文を使用して MyRequest の新しいインスタンスを作成します。 PathParams フィールドと Request フィールドは両方ともリテラル内で初期化されます。 Request フィールドは、参照解除の必要なしで初期化されることに注意することが重要です。
匿名の内部構造体がより大きな構造体内に埋め込まれている場合、埋め込みフィールドは外部構造体の名前を継承します。この場合、PathParams と Request の両方が MyRequest のフィールドになります。詳細については、[Struct Types](https://go.dev/ref/spec#Struct_types) の Go 仕様を参照してください。
以上がGo で既存のインスタンスを使用して埋め込み構造体フィールドを初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。