结构体
本章我们以一个简单的结构体为例来讲解,上一章的中我们定义过一个结构体:
其实结构体的字段通常是大写字母开头,这个原因我们将在第六章中具体说明,这个习惯会贯穿本书接下来的内容。
这个结构体有三个字段,分别是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}]
注意,结构体中字段的定义顺序是有意义的,简单来说,就算两个结构体拥有相同的字段,但是字段的声明顺序不同,那么这两个结构体也是不相等的。