数组

在 go 中 array是固定长度的数组,使用前必须确定数组长度,或者可以使用 … 来自动识别长度。golang中的数组是值类型,也就是说,如果你将一个数组赋值给另外一个数组,那么,实际上就是整个数组拷贝了一份。如果golang中的数组作为函数的参数,那么实际传递的参数是一份数组的拷贝,而不是数组的指针。array的长度也是Type的一部分,这样就说明[10]int和[20]int是不一样的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main

import "fmt"

func main(){
var arr1 [5]int // 定义一个数组,长度为5,值为空
arr2 := [3]int{1, 3, 5} // 定义一个长度为3的数组,值为1,3,5
arr3 := [...]int{2,4,6,8,10} // 定义一个长度不定的数组,值为 2,4,6,8,10

fmt.Println(arr1, arr2, arr3)

var grid [4][5]int // 4行5列的数组
fmt.Println(grid)

for i:=0; i<len(arr3);i++ { // 遍历数组方式1
fmt.Println(arr3[i])
}

for i, v:=range arr3 { // 遍历数组方式2, i 为下标,v为值。如果只要下标,那么可写为 i:=range arr3。如果只要值不要下标,那么可写为 _, v:=range arr3
fmt.Println(i, v)
}

/*
在 go 中,数组是值类型,也就是说在函数里面修改了数组的值,但是外面却不受影响。如果想要在函数里面数组的值,函数外面的值也发生变化的话,那么我们可以传递这个数组的指针,例如: func method(arr *[10]int)
[10]int 和 [20]int 是属于不同的类型
在函数参数中传递数组,会拷贝数组,例如 func method(arr [10]int) 那么 arr 将被完全拷贝一份然后传入函数中
在 go 中一般不直接使用数组
*/
}