Go 中的結構體轉換
考慮以下兩個結構體:
type A struct { a int b string } type B struct { A c string }
假設你有一個有一個類型的變數A 並想將其轉換為B 類型。在 Go 中可以嗎,還是需要手動複製欄位或建立明確轉換方法?
方法 1:嵌入結構體賦值
正如您在問題中提到的,嵌入可以用於此目的。透過將 A 嵌入到 B 中,只需將 A 類型的變數指派給嵌入欄位即可轉換為 B 類型。例如:
func main() { structA := A{a: 42, b: "foo"} structB := B{A: structA} // Embed structA into structB }
此方法建立 B 的新實例,其中嵌入欄位中包含 A 的資料。
方法2:手動欄位複製
或者,您可以手動將欄位從A 複製到B,如下所示:
func main() { structA := A{a: 42, b: "foo"} structB := B{ A: structA, // Copy fields from structA c: "bar", } }
此方法涉及建立B 的新實例並手動指派A 中的欄位。
方法 3:明確轉換方法
另一個選擇是建立將 A 轉換為 B 的明確轉換方法。如果您有複雜的轉換邏輯,這可能很有用。但是,在這種情況下,這種方法並不是必需的,因為上述方法提供了實現所需轉換的簡單方法。
以上是如何在 Go 中轉換結構:嵌入、手動複製或明確轉換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!