arrays - struct slice初始化的区别

标签 arrays go struct

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/

相关文章:

go - 将 Go 微服务保存在 Github 上的不同存储库中

c - 无法从 C 文本文件中读取结构

Java - 检索嵌套的 JSON 数组键值

go - new-ed 结构的返回类型是什么?

c - 对于数组,为什么 a[5] == 5[a]?

go - 为什么 CreateContainerOptions 的 Volumes 采用 map[string]struct{}?

c++ - 为什么它不能正确解析 XML 文件?

c++ - 从循环添加到结构 (c++)

c++ - Arduino (C/C++) 代码在 LCD 上显示数组内容

javascript - 如何将数组转换为树?