2016-06-09 101 views
4

我有兩個結構之間Golang - 結構

轉換
type A struct { 
    a int 
    b string 
} 

type B struct { 
    A 
    c string 
    // more fields 
} 

我想變量轉換類型A到類型B(A已經在其他定義僅是至關重要的一些部分基本字段,B手中包含「完整」數據)。

是否可能在Go中,或者我是否需要手動複製字段(或者創建一個方法A.GetB()或類似的東西,並使用它將A轉換爲B)?

+0

是什麼意思 「轉換」 A.data到B.data? – erip

+1

爲什麼你需要將結構類型轉換爲另一種結構類型,當嵌入式結構字段可以從父結構中訪問? –

+1

在C++中,您可以將A作爲B的基類,併爲B提供一個構造函數,它需要一個A(甚至可以使用* move語義*)。這也可能嗎? – Bathsheba

回答

6

通過轉換你的意思是這樣的:

func main() { 
    // create structA of type A 
    structA := A{a: 42, b: "foo"} 

    // convert to type B 
    structB := B{A: structA} 
} 
+0

這是一個很好的解決方案,我不知道我有一種印象,B.a.a在這個任務後會有不同的價值。 –

-2

AB類型具有不同的基礎類型,因此它們不能互相轉換。沒門。

因此,無論是手動複製還是提供轉換器功能或執行此複製的方法。

+0

這是錯誤的答案。請刪除它。 B有一個嵌入其中。 – khrm

+1

不,答案是正確的。類型轉換在https://golang.org/ref/spec#Conversions中定義。這裏的相關案例是「相同的基礎類型」(沒有)和「可分配的」(他們不是)(見https://golang.org/ref/spec#Assignability)。 B嵌入A的事實在這裏完全不相關。 – Volker

+0

是的,但您可以在這裏使用不安全的指針進行轉換,因爲佈局完全相同。你不需要任何功能或東西。 – khrm