Go语言中的Array、Slice、Map和Set使用详解
Array(数组)
内部机制
在Go语言中数组是固定长度的数据类型,它包含相同类型的连续的元素,这些元素可以是内建类型,像数字和字符串,也可以是结构类型,元素可以通过唯一的索引值访问,从0开始。
数组是很有价值的数据结构,因为它的内存分配是连续的,内存连续意味着可是让它在CPU缓存中待更久,所以迭代数组和移动元素都会非常迅速。
数组声明和初始化
通过指定数据类型和元素个数(数组长度)来声明数组。
//声明一个长度为5的整数数组 vararray[5]int
一旦数组被声明了,那么它的数据类型跟长度都不能再被改变。如果你需要更多的元素,那么只能创建一个你想要长度的新的数组,然后把原有数组的元素拷贝过去。
Go语言中任何变量被声明时,都会被默认初始化为各自类型对应的0值,数组当然也不例外。当一个数组被声明时,它里面包含的每个元素都会被初始化为0值。
一种快速创建和初始化数组的方法是使用数组字面值。数组字面值允许我们声明我们需要的元素个数并指定数据类型:
//声明一个长度为5的整数数组 //初始化每个元素 array:=[5]int{7,77,777,7777,77777}
如果你把长度写成...,Go编译器将会根据你的元素来推导出长度:
//通过初始化值的个数来推导出数组容量 array:=[...]int{7,77,777,7777,77777}
如果我们知道想要数组的长度,但是希望对指定位置元素初始化,可以这样:
//声明一个长度为5的整数数组 //为索引为1和2的位置指定元素初始化 //剩余元素为0值 array:=[5]int{1:77,2:777}
使用数组
使用[]操作符来访问数组元素:
array:=[5]int{7,77,777,7777,77777} //改变索引为2的元素的值 array[2]=1
我们可以定义一个指针数组:
array:=[5]*int{0:new(int),1:new(int)}
//为索引为0和1的元素赋值 *array[0]=7 *array[1]=77