2017-08-07 149 views
-1

說我有UnnamedTypes的結構:在結構轉換命名類型無名類型

type UnnamedTypes struct { 
    i []int 
    f []float64 
} 

還有一些命名類型:

type I []int 
type F []float64 

type NamedTypes struct { 
    i I 
    f F 
} 

什麼是NamedTypes結構分配給UnnamedTypes最簡單的方法結構?

func main() { 
    var u UnnamedTypes 
    var n NamedTypes 

    u.i = []int{1,2} 
    u.f = []float64{2,3} 

    n.i = []int{2,3} 
    n.f = []float64{4,5} 

    u = UnnamedTypes(n) 
} 

失敗cannot convert n (type NamedTypes) to type UnnamedTypes

+0

當您使用別名類型時,它們將成爲新的類型。儘管有這種想法,但它們並不等同。 – RayfenWindspear

+0

是的我知道了,我現在編輯我的問題問,如果所有字段名稱相同,最簡單的方法是將另一個分配給另一個。 – salient

+0

結構類型是不同的,所以你不能轉換它。您需要單獨分配字段。 – JimB

回答

3

使用舊的創建一個新的結構值。

u = UnnamedTypes{ 
    i: n.i, 
    f: n.f, 
} 

警告,但因爲這些特定值是切片,在兩種不同結構的切片完全一樣的切片。修改其中一個會修改另一個。這同樣適用於任何指針(包括地圖和接口)。如果您希望他們擁有自己的副本,則必須分配副本。