こんにちは私は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を初期化する方法を提案してください。Golangでネストされた構造体を初期化するで説明されている方法を試してみましたが、これでも機能しません。
残念ながら、構造体フィールドの型が匿名の構造体である場合、構築時に、匿名の構造体の型を「複製」することによってのみ初期化できます(再度指定します)。
type DetailsFilter struct {
Filter struct {
Name string
ID int
}
}
df := DetailsFilter{Filter: struct {
Name string
ID int
}{Name: "myname", ID: 123}}
fmt.Println(df)
出力:
{Filter:{Name:myname ID:123}}
そのため、代わりに、構築時に初期化しないことをお勧めします。次のように、ゼロ値の構造体が作成された後で実行します。
df = DetailsFilter{}
df.Filter.Name = "myname2"
df.Filter.ID = 321
fmt.Printf("%+v\n", df)
出力:
{Filter:{Name:myname2 ID:321}}
Go Playgroundでお試しください。
または、フィールド型として匿名の構造体をまったく使用せず、次のように型に名前を付けます。
type Filter struct {
Name string
ID int
}
type DetailsFilter struct {
Filter Filter
}
そして、次のように単純に初期化できます。
df := DetailsFilter{Filter: Filter{Name: "myname", ID: 123}}
fmt.Printf("%+v\n", df)
出力(Go Playgroundで試してください):
{Filter:{Name:myname ID:123}}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加