使用Go 1.8中引入的功能将结构(将其中一个字段作为结构)分配给另一个结构

时间:2017-06-20 09:12:57

标签: go struct

我知道自从Go 1.8以来,可以将一个结构分配给另一个结构类型,如下所示:

func example() { type T1 struct { X int JSON:"富" } type T2 struct { X int JSON:" BAR" } var v1 T1 var v2 T2 v1 = T1(v2) // now legal }

但是,如果结构内部将其中一个字段作为另一个结构,则它不起作用。

游乐场:https://play.golang.org/p/tSHdjBhhAJ

除了手动分配每个字段外,在这种情况下分配2个结构的最佳方法是什么?

这不是Assign struct with another struct的副本,因为在这里,您将结构分配给同一类型的另一个结构。但是我想要的是分配两个具有相同字段名称的不同结构。

1 个答案:

答案 0 :(得分:3)

新的Go 1.8功能仅在结构具有相同的字段名称和类型时才有效。尽管Test2和Test4结构在字段上是相同的,但它们是两种不同的类型,因此编译器不允许它们的赋值。有人可能会争辩说,结构应该进行深度比较而不是简单的类型比较,但这并不是当前实现的方式。你有三个选择:在每个结构字段中使用相同的结构类型,在每个结构中使用一个匿名结构(https://play.golang.org/p/Hw7HANwqbZ),或者创建一个辅助函数来手动转换这两个结构。

目前有一项建议允许在没有逐字段辅助方法的情况下转换深度等效的结构,但目前已针对Go 2.x进行了转换:https://github.com/golang/go/issues/20621