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

Golang でネストされた構造体を適切に初期化するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-22 02:41:12319ブラウズ

How to Properly Initialize Nested Structs in Golang?

Golang でのネストされた構造体の初期化

Golang でネストされた構造体を操作する場合、メイン構造体の初期化は難しい場合があります。このガイドは、匿名構造体をフィールドとして埋め込んだ構造体を初期化しようとしたときに発生したエラーの解決策を提供することを目的としています。

エラーが発生しました

type DetailsFilter struct {
  Filter struct {
    Name    string
    ID      int
  }
}

var M map[string]interface{}
M = make(map[string]interface{})
M["Filter"] = map[string]interface{}{"Name": "XYZ", "ID": 5}
var detailsFilter = DetailsFilter{Filter: M["Filter"]}}

このコードは、DetailsFilter を初期化しようとしています。ネストされた匿名構造体フィルターを含む構造体。ただし、マップから Filter フィールドを初期化しようとすると、エラーが発生します。

can not use (type interface {}) as type struct in field value : need type assertion

解決策

推奨される解決策は、構築中にネストされた匿名構造体を初期化しないことです。代わりに、ゼロ値の構造体を初期化し、ネストされたフィールドに値を割り当てます:

df := DetailsFilter{}
df.Filter.Name = "myname"
df.Filter.ID = 123

もう 1 つの代替方法は、匿名の構造体型に名前を付けて明示的に初期化することです:

type Filter struct {
    Name string
    ID   int
}

type DetailsFilter struct {
    Filter Filter
}

df := DetailsFilter{Filter: Filter{Name: "myname", ID: 123}}

追加注

  • 発生したエラーは、マップにインターフェイス値が含まれており、インターフェイスに直接割り当てることができないためです。{} struct フィールド。
  • 匿名の構造体型に名前を付けると、より明示的な初期化が可能になります。
  • ネストされた構造体を使用する場合、さまざまな初期化アプローチの制限を理解することが重要です。

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

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