ホームページ > バックエンド開発 > Golang > Go でネストされた構造体を効率的に初期化するにはどうすればよいですか?

Go でネストされた構造体を効率的に初期化するにはどうすればよいですか?

DDD
リリース: 2024-12-10 21:51:11
オリジナル
481 人が閲覧しました

How Can I Efficiently Initialize Nested Structs in Go?

Go でのネストされた構造体の初期化: リテラル初期化の探索

複雑なデータ構造を扱う場合、マルチレベルのネストされた構造体の初期化が課題になることがあります囲碁で。この記事では、このような構造体を初期化しようとするときに発生する一般的な問題に対処し、名前付き構造体型を活用することによる解決策を提供します。

問題

この例では、複合リテラルを使用して、匿名の内部型でネストされた構造体を初期化するために作成されます。ただし、Go では、構造体の定義がネストの各層で繰り返される場合にのみこれが可能です。これは不便で、繰り返しが多い可能性があります。

解決策: 名前付き構造体型の利用

初期化プロセスを簡素化するために、ネストの各レベルに名前付き構造体型を導入できます。これにより、複合リテラルを使用してこれらの名前付き型を初期化し、メイン構造体の構築に使用できるようになります。

コード サンプル

次の更新されたコードを考えてみましょう。

type domain struct {
    id string
}

type user struct {
    name     string
    domain   domain
    password string
}

type password struct {
    user user
}

type identity struct {
    methods  []string
    password password
}

type auth struct {
    identity identity
}

type tokenRequest struct {
    auth auth
}

func main() {
    req := &tokenRequest{
        auth: auth{
            identity: identity{
                methods: []string{"password"},
                password: password{
                    user: user{
                        name: os.Username,
                        domain: domain{
                            id: "default",
                        },
                        password: os.Password,
                    },
                },
            },
        },
    }

    fmt.Printf("%+v\n", req)
}
ログイン後にコピー

名前付き構造体型を定義し、複合リテラルを使用して初期化することで、複雑な構造体を簡単に構築できます中間の構造体定義を必要としない、ネストされた構造体。

以上がGo でネストされた構造体を効率的に初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート