如何在 Golang 中初始化嵌入式結構
在 Go 中,可以在其他結構中定義結構以建立巢狀資料結構。但是,初始化這些巢狀結構可能會帶來挑戰。
請考慮以下範例:
type DetailsFilter struct { Filter struct { Name string ID int } }
要使用嵌入的 Filter 結構初始化 DetailsFilter 結構,如果您嘗試,可能會遇到錯誤將通用對應指派給篩選器欄位。
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"]}}
您將收到的錯誤是:「無法使用(類型介面{}) 作為欄位值中的類型結構:需要類型斷言。」
此錯誤的原因是此處用於Filter 的匿名結構欄位需要在初始化期間指定確切的類型。您可以透過在匿名結構中明確定義Filter 欄位的類型來解決此問題:
type DetailsFilter struct { Filter struct { Name string ID int } } df := DetailsFilter{Filter: Filter{Name: "XYZ", ID: 5}}
或者,您可以選擇不為Filter 使用匿名結構,而是為其指定命名類型:
type Filter struct { Name string ID int } type DetailsFilter struct { Filter Filter } df := DetailsFilter{Filter: Filter{Name: "XYZ", ID: 5}}
這兩種方法都允許您使用巢狀的Filter 結構來初始化DetailsFilter 結構。
以上是如何正確初始化 Go 中的嵌入式結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!