数组是go语言编程中最常用的数据结构之一,数组中的每个数据被称为数组元素,一个数组中元素的个数被称为数组的长度。数组的声明方法:
var arr [32]int //声明一个长度为32的数组,数组中的元素为int
var arr [12]*int //声明一个长度为12的数组,数组中的元素为*int
var arr [3][5]int //声明一个3行5列二维数据,数组中元素为int
在go语言中,数组的长度在定义之后就不可以更改,在声明数组长度可以为一个常量或者一个常量表达式(常量表达式是指在编译期即可以计算结果的表达式)。数组的长度是该数组类型的一个内置常量,可以用go语言的内置函数len()来获取,例如:
arrLen := len(arr)
遍历数组的方式和字符串的遍历方式相同,第一种方式是使用数组下标来访问数组中的元素,数组的下标从0开始,例如:
for i := 0; i < len(arr); i++{
fmt.Printf("arr[%d] = %v\n",i,arr[i])
}
第二种访问方式是使用关键字range,range具有两个返回值,第一个返回值为元素在数组中的下标,第二个返回值为元素的值,用于便捷地遍历容器中的元素,上面的遍历过程可以改写为如下的写法:
for index, val := range arr{
fmt.Printf("arr[%d] = %v\n",index,val)
}
note:在go语言中数组是一个值类型,所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作,如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制,因此,在函数体重无法修改传入的数组的内容,因为函数内操作的只是所传入数组的一个副本。代码如下:
package main
import "fmt"
func modify(arr [5]int) {
for index, val := range arr {
arr[index] = val + 1
}
fmt.Println("func modify arr = ", arr)
}
func main() {
arr := [5]int{1, 2, 3, 4, 5}
modify(arr)
fmt.Println("func main arr = ", arr)
}
输出结果:
func modify arr = [2 3 4 5 6]
func main arr = [1 2 3 4 5]
从执行结果可以看出,函数modify()内操作的那个数组和main()函数中传入的数组是两个不同的实例。将在下一篇博客中讲解数组切片。可以解决函数modify()中操作的数组和main()函数中传入的数组是同一个数组。