ホームページ  >  記事  >  バックエンド開発  >  Go で既存のインスタンスを使用して埋め込み構造体フィールドを初期化するにはどうすればよいですか?

Go で既存のインスタンスを使用して埋め込み構造体フィールドを初期化するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-12 06:03:02950ブラウズ

How Can You Initialize an Embedded Struct Field Using an Existing Instance in Go?

Go での埋め込み構造体の初期化で遭遇する問題

埋め込み構造体は 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。