首頁 >後端開發 >Golang >如何正確初始化 Go 中的嵌入式結構?

如何正確初始化 Go 中的嵌入式結構?

DDD
DDD原創
2024-12-27 18:24:15397瀏覽

How to Properly Initialize Embedded Structs in Go?

如何在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn