type Person struct {
ID int `json:"id"`
}
type PersonInfo []Person
type PersonInfo2 []struct {
ID int `json:"id"`
}
PersonInfo
(命名结构的命名 slice )和PersonInfo2
(未命名结构的命名 slice )之间有区别吗
最佳答案
主要区别在于您必须如何在 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")
}
将打印“不等于”。
Here是您自己查看的链接。
当附加到 PersonInfo2 时,我们必须为每个要附加的值重复匿名结构类型,最好将 PersonInfo 用作 Person 类型的数组。
关于arrays - struct slice初始化的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46822442/