3.3.2 初始化数组 数组的初始化方式有不止一种方式,我们列举如下: 直接进行初始化:var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0} 通过字面量在声明数组的同时快速初始化数组:balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0} 数组长度不确定,编译器通过元素个数自行推断数组长度,在[ ]中填入...,举例如下:var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}和balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0} 数组长度确定,指定下标进行部分初始化:balanced := [5]float32(1:2.0, 3:7.0) 注意: 初始化数组中 {} 中的元素个数不能大于 [] 中的数字。 如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小。 3.3.3 go中的数组名意义 在c语言中我们知道数组名在本质上是数组中第一个元素的地址,而在go语言中,数组名仅仅表示整个数组,是一个完整的值,一个数组变量即是表示整个数组。 所以在go中一个数组变量被赋值或者被传递的时候实际上就会复制整个数组。如果数组比较大的话,这种复制往往会占有很大的开销。所以为了避免这种开销,往往需要传递一个指向数组的指针,这个数组指针并不是数组。关于数组指针具体在指针的部分深入的了解。 3.3.4 数组指针 通过数组和指针的知识我们就可以定义一个数组指针 数组指针除了可以防止数组作为参数传递的时候浪费空间,还可以利用其和for range来遍历数组 具体关于go语言的循环语句我们在后文中再进行详细介绍。 3.4 结构体 通过上述数组的学习,我们就可以直接定义多个同类型的变量,但这往往也是一种限制,只能存储同一种类型的数据,而我们在结构体中就可以定义多个不同的数据类型。 3.4.1 声明结构体 在声明结构体之前我们首先需要定义一个结构体类型,这需要使用type和struct,type用于设定结构体的名称,struct用于定义一个新的数据类型。 定义好了结构体类型,我们就可以使用该结构体声明这样一个结构体变量 3.4.2 访问结构体成员 如果要访问结构体成员,需要使用点号 . 操作符,格式为:结构体变量名.成员名。 3.4.3 结构体指针 关于结构体指针的定义和申明同样可以套用前文中讲到的指针的相关定义,从而使用一个指针变量存放一个结构体变量的地址。
这种指针变量的初始化和上文指针部分的初始化方式相同struct_pointer = &Book1,但是和c语言中有所不同,使用结构体指针访问结构体成员仍然使用.操作符。格式如下:struct_pointer.title