数组的声明
声明语法
var 数组的变量名 [元素数量]Type
var arr0 [3]string
只声明类型,不赋初值,编译器会给数组默认赋上零值
func main() {
var a [4]int
fmt.Println(a) // [0, 0, 0, 0]
}
Go语言中的数组是一种值类型,所以还可以通过new() 来创建
var arr1 = new([3]string)
两种方式的区别:
arr0 的类型是 [5]string, arr1 的类型是 *[5]string
数组越界
func main() {
var a = [3]int{1, 2, 3}
a[3] = 3 // 越界,数组定义只有三个3元素,数组下标是从 0 开始
fmt.Println(a)
在Go中我们可以使用len() 获取到数组的长度
数组的赋值
因为数组是值拷贝,所以当把一个数组赋值给另一个时,在赋值修改后不会影响
func main() {
var arr1 = [2]int{1, 2}
var arr2 = new([2]int)
arr1 = *arr2
arr1[1] = 2
fmt.Println(arr1) // [0 2]
fmt.Println(arr2) // &[0 0]
arr2[1] = 3
fmt.Println(arr1) // [0 2]
fmt.Println(arr2) // &[0 3]
}
想要修改原数组必须通过&操作符以引用的方式
func main() {
var arr1 = [2]int{1, 2}
var arr2 = new([2]int)
arr2 = &arr1
arr2[1] = 3
fmt.Println(arr1) // [0 3]
fmt.Println(arr2) // &[0 3]
}
如果数组的长度不同赋值会有什么结果呢
func main() {
var a = [5]int{1,2,3,4,5}
var b [6]int
b = a
fmt.Println(b)
}
运行结果: cannot use a (type [5]int) as type [6]int in assignment
数组的遍历
func main() {
var arr = [5]string{"a", "b", "c", "d", "e"}
for index, value := range arr {
fmt.Println(index, value)
}
}
--------------------------
0 a
1 b
2 c
3 d
4 e
小结
1 . 数组使用时要注意越界
2 . Go 语言中的数组是定长的,长度定义好后就不能再更改了。因为数组的长度是类型的一部分,限制了其灵活性([3]string 和 [4]string 是不同类型), 所以在Go中使用的很少