【发布时间】:2017-06-21 01:04:26
【问题描述】:
我知道,从 Go 1.8 开始,可以将一个结构分配给另一种结构类型,如下所示:
func example() {
type T1 struct {
X intjson:"foo"
}
type T2 struct {
X intjson:"bar"
}
var v1 T1
var v2 T2
v1 = T1(v2) // now legal
}
但是,如果结构内部有一个字段作为另一个结构,则它不起作用。
游乐场:https://play.golang.org/p/tSHdjBhhAJ
在这种情况下,除了手动分配每个字段之外,分配 2 个结构的最佳方法是什么?
这不是Assign struct with another struct 的重复,因为在这里,您将一个结构分配给另一个相同类型的结构。但是我想要的是分配两个具有相同字段名称的不同结构。
【问题讨论】:
-
新的 Go 1.8 功能仅在结构具有相同的字段名称和 types 时才有效。尽管您的 Test2 和 Test4 结构在字段上是相同的,但它们是两种不同的类型,因此编译器不允许对其进行赋值。有人可能会争辩说,应该对结构进行深度比较而不是简单的类型比较,但这不是目前实现的方式。您有三个选择:在每个结构字段中使用相同的结构类型,在每个结构中使用匿名结构 (play.golang.org/p/Hw7HANwqbZ),或者创建一个辅助函数来手动转换两者。
-
重新打开。 @Kaedys 想把它作为答案发布吗?
-
转贴为答案。