在Go语言中,数组是一种具有相同类型固定大小的一种数据结构。
我们先来看看数组的使用,数组类型声明时的方式是 []T ,前面的[]指定数组的大小,T指定数组的类型,如下我们声明了一下数组,数组的大小是3,在没指定数组初始值时数组默认初始值是{0,0,0}
array1 := [3]int{}
//我们可以通过如下方式给数组赋值
array1[0] = 1
array1[1] = 2
array1[2] = 3
//下面这种也是数组声明的一种方式,并且初始化数组的值为{1,2}
array2 := [2]int {1,2}
思考一下前面我们array1赋值给array2对吗?记住,这种方式是错误的,在Go语言中只有大小相等,类型相同的数组才是同类型的数组,之间才可以相互赋值,如下截图,我们可以看见array1赋值给array2时编译器报错。
array2 = array1
数组的遍历访问。
//访问数组中的元素
array4 := [2]int {1,2}
//访问数组下标为0处的值并打印
fmt.Println(array4[0])
//通过range遍历数组,
//i代表数组的下标,
//v代表数组下标为i处的值
for i,v := range array4{
fmt.Println(i,v)
}
array5 := [2][2]int{{1,2},{3,4}}
for i,tempArray := range array5{
//此时tempArray是一维数组
//再通过range 遍历tempArrayy一维数组
for j,v := range tempArray{
fmt.Println(j,v)
}
}
切片
在Go语言中,切片是数组的一种高级运用,相对于数组,切片是一种更加方便,灵活,高效的数据结构。,切片并不存储任何元素而只是对现有数组的引用(不是值拷贝,是指针)
通过数组创建
array1 := [3]int{1,2,3}
//将数组下标从1处到下标2处的元素转换为一个切片(前闭后开)
slice1 := array1[1:2]
通过切片生成一个切片
//下面代码直接出初始化一个切片 (这里大家有个疑问,我不管怎么看都觉得它是一个数组啊)
//记住,再go语言中,区别一个变量是数组还是切片,就看有没有定义长度
//有定义长度就是数组,如array1,没定义就是切片 如slice2
//我们也通过fmt.Println(reflect.TypeOf(array1),reflect.TypeOf(slice2))
//上面这代码打印的结果是[3]int,[]int,可以看到前者有长度,后者没有
slice2 := []int{1,2,3}