摘要
本文介绍了Go语言中数组的特点、定义方式与使用注意事项,然后介绍了其引申内容《切片》的内容,同时也分析了Go中的数组和切片与C、Java中数组的不同。
1、数组的定义与特点
定义
在Go中,首先明确数组是基本类型,而在java中数组是一个对象。
数组的类型是[n]T,表示该类型拥有n个T类型的值,其定义规则有以下几种:
var a [10]int //默认赋零值
a := []int{1, 2, 3} //数组长度有赋值格式决定
a := [10]int{1,2,3} //多余的部分直接赋零值
特点
Go语言的数组和java和c中是完全不同的,go中数组变量代表了整个数组,而不是c中指向数组的指针,或者java中代表一个对象的地址。其具体特点如下:
- 1、长度n是数组类型的固有属性,在定义是必须指定数组长度。同时[4]int和[5]int不是同一种类型,在=号复制和函数传参时都不能混用,案例如下:
func changeArr(arr [3]int) {
arr[0] = 100
return
}
arr1 := [5]int{1, 2, 3, 4, 5}
changeArr(arr4) //编译报错:cannot use arr4 (variable of type [5]int) as [3]int value in argument to changeArr
arr2 := [4]int{1, 2, 3}
arr2 = arr1 //编译报错:cannot use arr4 (variable of type [5]int) as [4]int value in assignment
- 2、由于数组在Go中是基本数据类型,因此无论是等号赋值还是函数传参都是值传递!!!,案例如下:
arr2 := [3]int{1, 2, 3}
arr3 := arr2
arr3[1] = 0
fmt.Println("arr2:", arr2)
fmt.Println("arr3:", arr3)
************输出结果*************
arr2: [1 2 3]
arr3: [1 0 3]
2、切片的引入与定义
小节1中数组的两个特性导致改变数组大小或对数组引用传递时非常不方便,因此在Go语言中一般使用切片而不是数组。
切片使用[]T来表示,表示类型T的切