1.什么是数组
数组属于复合型数据类型,它是由相同类型的一组零个或多个元素组成的固定长度的集合。go语言中很少直接使用数组,一般使用slice(切片),切片的长度是可以扩展的,但是slice的底层还是使用的数组。数组提供了len()方法统计自己的长度。
2.数组的声明和初始化
声明数组:
a.没有指定数组的大小
var arrInt []int fmt.Printf("%T",arrInt)
b.指定数组的大小
var arrInt [8]int
数组初始化:
a.使用字面值语法用一直值初始化数组
var test [3]int = [3]int{1,2,3}
b.在不知道要初始化具体长度的数组,需要根据具体元素个数初始化数组是,可以使用"..."声明数组
td := [...]int{0,4,5,2}
c.在数组的指定位置赋值
tx := [...]int{6:6} fmt.Printf("%T,%d\n",tx, tx[6])
3.数组比较
如果两个数组的元素是可以比较的,那么这两个数组也是可以相互比较的。直接通过“==”就可以直接比较两个数组,在两个数组长度、容量、和所有元素及对应位置都相同时,则这两个数组是相等的。
var a [2]int = [2]int{1,2} b := [...]int{1,2} fmt.Printf("%t\n",a == b)
比价的结果为true,说明这两个数组是相等的。
4.数组引用
当数组当做参数传入到指定的func中时,函数参数变量实际接收的是数组复制的副本,在函数中对数组做任何的修改都不会改变原有的数组。其他大多数语言都是隐式的将数组引用或指针传入到函数或方法中,go语言在这方法和其他语言是不同的。
当希望在函数中能直接改变原有的数组时,可以显示地传入数组的指针。例如下面例子将数组清零
func toZero(p *[32]byte){ for i := range p{ p[i] = 0 } }
当然函数也可以简化为
func toZero1(p *[32]byte){ *p = [32]byte{} }