的主要区别是如何必须初始化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类型的数组使用。