概述
与C相同,Go的结构体是零个或多个任意类型的命名变量组合在一起的聚合数据类型,每个变量叫做结构体的成员。结构体的每个成员都通过点号来访问。
定义结构体时,成员通常一行写一个,但相同类型的成员也可以写在同一行上。但需要注意的是:成员的顺序对于结构体同一性很重要,如果我们将变量的定义顺序调换或者将本来单行定义的变量写成同一行(或反之),那么我们就会定义一个不同的结构体类型。
命名结构体类型不可以定义一个拥有相同结构体类型的成员,也就是一个聚合类型不可以包含它自己(对数组也同样适用)。但结构体s可以包含一个s类型的指针,即*s。
初始化结构体有两种方式,一种不需指明成员,但要求按照正确的顺序为每一个成员指定一个值。这种方式会给开发和阅读代码的人增加负担,因为他们必须记住每个成员的顺序,另外这也使得未来结构体成员扩充或者重新排列的时候代码维护性差。所以这种格式一般用在定义结构体类型的包中或者一些有明显成员顺序约定的小结构体中。第二种方式需要指明成员名称来初始化,但可以只初始化部分成员,未指明的成员则会自动初始化为对应类型的默认值。
type Vertex struct {
X int
Y int
}
func main() {
v := Vertex{0, 1} // v := Vertex{X:0, Y:1}
fmt.Println(v.X, v.Y)
}
结构体嵌套和匿名成员
G