将命名类型转换为未命名类型

时间:2017-08-07 19:41:04

标签: go struct

假设我有一个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

失败

1 个答案:

答案 0 :(得分:3)

使用旧的结构值创建一个新的结构值。

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

虽然警告,因为这些特定值是切片,两个不同结构中的切片是完全相同的切片。修改一个将修改另一个。这同样适用于任何指针(包括地图和接口)。如果您希望他们拥有自己的副本,则必须分配副本。