定义数组:
var arr1 [5]int
arr2 := [3]int{1, 3, 5}
arr3 := [...]int{2, 4, 6, 8, 10}
// 二维数组
var grid [4][5]int
fmt.Println(arr1, arr2, arr3)
// [0 0 0 0 0] [1 3 5] [2 4 6 8 10]
fmt.Println(grid)
// [[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
遍历数组:
// 遍历方法1 不常用
numbers := [6]int{1,3,2,5,8,4}
for i := 0; i < len(numbers); i++ {
fmt.Println(numbers[i])
}
// 遍历方法2 常用
for i := range arr3 {
fmt.Println(arr3[i])
}
for i, v := range arr3 {
fmt.Println(i, v)
}
for _, v := range arr3 {
fmt.Println(v)
}
数组是值类型,当将数组作为参数传入函数时,由于go语言的值传递机制,会对数组进行拷贝:
func printArray(arr [5]int) {
// 在将数组作为参数时,一定要指明其长度
// 因为数组长度不同就是不同的类型,如[10]int和[20]int是不同的类型
arr[0] = 100
for i, v := range arr {
fmt.Println(i, v)
}
}
func main() {
printArray(arr1)
printArray(arr3)
fmt.Println(arr1, arr3)
}
可以借助指针来达到引用传递的功能,即在函数内修改参数数组,但一般不这么做:
func printArray(arr *[5]int) {
// 在将数组作为参数时,一定要指明其长度。因为数组长度不同就是不同的类型,如[10]int和[20]int是不同的类型
arr[0] = 100
for i, v := range arr {
fmt.Println(i, v)
}
}
func main() {
printArray(&arr1)
printArray(&arr3)
fmt.Println(arr1, arr3)
}
在go语言中一般不直接使用数组,而是使用切片。