首頁  >  文章  >  後端開發  >  如何在 Go 中轉換結構:嵌入、手動複製或明確轉換?

如何在 Go 中轉換結構:嵌入、手動複製或明確轉換?

Susan Sarandon
Susan Sarandon原創
2024-10-29 01:40:02666瀏覽

How to Convert a Struct in Go: Embedding, Manual Copying, or Explicit Conversion?

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

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