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 的明確轉換方法。如果您有複雜的轉換邏輯,這可能會很有用。但是,在這種情況下,這種方法並不是必需的,因為上述方法提供了實現所需轉換的直接方法。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3