Go でのネストされた構造体のリテラル初期化
Go で複雑なデータ構造を実装する場合、ネストされた構造体の初期化が課題になることがあります。場合によっては、ネストされた各レベルを明示的に定義せずに、これらの構造体を直接初期化することが望ましいことがあります。
問題ステートメント
次の構造体を考えてみましょう:
type tokenRequest struct { auth struct { identity struct { methods []string password struct { user struct { name string domain struct { id string } password string } } } } }
この構造体を初期化しようとする素朴な試みは次のようになります。 this:
req := &tokenRequest{ auth: struct { identity: struct { methods: []string{"password"}, password: { user: { name: os.Username, domain: { id: "default", }, password: os.Password, }, }, }, }, }
解決策: 名前付き構造体型
この初期化を簡素化する鍵は、名前付き構造体型を使用することです。これにより、構造体を一度定義して、それを複数の場所で使用できるようになります:
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 }
名前付き構造体タイプを使用すると、tokenRequest 構造体を直接初期化できるようになりました:
req := &tokenRequest{ auth: auth{ identity: identity{ methods: []string{"password"}, password: password{ user: user{ name: os.Username, domain: domain{ id: "default", }, password: os.Password, }, }, }, }, }
これにより、 Go でネストされた構造体を初期化するためのより簡単で簡潔な方法。
以上がGo でネストされた構造体の初期化を簡素化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。