结构体

    本章我们以一个简单的结构体为例来讲解,上一章的中我们定义过一个结构体:

    其实结构体的字段通常是大写字母开头,这个原因我们将在第六章中具体说明,这个习惯会贯穿本书接下来的内容。

    这个结构体有三个字段,分别是person,height,weight。现在,你可以创建一个类型为astructure的变量了:

    另外,我们使用操作符来访问结构体中的字段,例如我们可以使用s1.person来获取person字段的值。

    一个结构体字面量可以这样定义:

    然而你可能觉得记住结构体中字段的声明顺序实在是太难了,莫慌,我们有另外一种定义结构体字面量的方式:

    p1 := aStructure{weight: 12, height:-2}

    这种方式你无须初始化结构体中的所有字段。

    现在你已经了解了结构体的基本操作,让我们尝试一些实战性更强的代码吧,这部分代码保存在中,分为三部分。

    第一部分代码:

    第二部分代码:

    我们使用两种定义结构体字面量的方式定义了p1与,并且打印出来。

    最后一部分:

    最后一部分代码中,我们创建了一个结构体数组pSlice,当你将一个结构体分配给结构体数组,那么这个结构体就会被深拷贝至这个数组,这意味着改变原结构体是对数组中的结构体没有影响的,从下面的打印输出中我们能够看出来:

    $ go run structures.go

    0 0 {23 12 -2} {0 13 12} [{0 13 12} {0 0 0} {23 12 -2} {0 0 0}]

    [{0 13 12} {0 0 0} {23 12 -2} {0 0 0}]

    注意,结构体中字段的定义顺序是有意义的,简单来说,就算两个结构体拥有相同的字段,但是字段的声明顺序不同,那么这两个结构体也是不相等的。