Jac*_*ore 6
主要区别在于如何在PersonInfo/PersonInfo2初始化之外初始化Person对象.由于PersonInfo2是匿名结构类型的数组,因此在PersonInfo2初始化之外我们对此类型一无所知.
所以他们都可以像这样初始化:
m := PersonInfo{{1}, {2}}
n := PersonInfo2{{1},{2}}
但是,如果我们想要附加匿名结构类型的元素,我们必须指定完整类型:
append(n, struct { ID int `json:"id"` }{3})
fmt.Printf("%+v\n%+v", m, n)
[{ID:1} {ID:2}]
[{ID:1} {ID:2}]
但是它们不会非常相等,因为PersonInfo是Person类型的数组,而PersonInfo2是一个匿名结构类型的数组.所以以下内容:
if !reflect.DeepEqual(m,n) {
print("Not Equal")
}
将打印"不等于".
这是一个自己看的链接.
当附加到PersonInfo2时,我们必须为我们想要追加的每个值重复匿名结构类型,最好将PersonInfo用作Person类型的数组.
- 请注意,切片的初始化不是问题,因为您可以省略`elemnt的类型`并仅使用`{}`,当您想要将新元素附加到切片时会产生痛苦.https://play.golang.org/p/ZQR0zjEFS- (2认同)