2017-08-07 6 views
-1

は私が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

yup私は今、私の質問を編集して、すべてのフィールド名が同じであれば、最も簡単に割り当てることができます。 – salient

+0

構造体の型が異なるため、構造体の型は変換できません。フィールドを個別に割り当てる必要があります。 – JimB

答えて

3

で失敗します。

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

警告これらの具体的な値はスライスであるのでしかし、二つの異なる構造体におけるスライスは、正確に同じスライスです。一方を変更すると他方が変更されます。同様のことがポインタ(マップやインタフェースを含む)にも適用されます。あなたが彼ら自身のコピーを持つことを望むなら、コピーを割り当てる必要があります。

関連する問題