数组(Array)是有序的元素序列,是具有相同 唯一类型的一组以编号且长度固定的数据项序列。切片(slice)是对数组一个连续片段的引用。本文将简要介绍数组与切片。
数组
数组声明与初始化
数组声明格式如下
var 数组名 [长度]数据类型
例如
var arr [5]int
第一个元素是arr[0],第三个元素是arr[2],最后一个元素是arr[len(arr)-1],上例中最后一个元素为arr[4]
数组是可变的,可以使用如下操作
arr[i] = value
Go 语言中的数组是一种 值类型(不像 C/C++ 中是指向首元素的指针),所以可以通过 new() 来创建: var arr1 = new([5]int),所以把一个数组赋值给另一个时,需要再做一次数组内存的拷贝操作。
例如
arr2 := *arr1
arr2[2] = 100
在赋值后修改 arr2 不会对 arr1 生效
数组常量
可以用数组常量的方式来初始化数组,有以下几种方式
var arr1 = [3]int{12,4,90}
var arr2 = [...]int{2,34,7}
var arr3 = [5]string{2:"A",4:"b"}
只有索引2,4被赋予实际的值,其他元素都被设置为空的字符串
多维数组
数组多是一维的,也有多维数组,例如[3][5]int
切片
切片本质上是一个长度可变的数组 切片声明格式如下
var 切片名 []数据类型 = 数组名[开始部分:结束部分]
还可以用以下方法声明切片
var slice []type = arr[:]
则表示slice是完整的数组arr
一个由数字1,2,3组成的切片可以这么生成
s:=[3]int{1,2,3}[:]
或者
s:=[]int{1,2,3}
切片也可以用1类似数组的方式初始化
var s = []int{2, 3, 5, 7, 11}
相关数组还没有定义时,可以用make()函数创造一个切片,同时创建相关数组
var 切片名 []数据类型 = make([]数据类型, 长度)
这里的长度是数组长度,也是切片的初始长度