数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素,一个数组包含的元素个数被称为数组的长度。
一、定义数组的格式
var <varName> [n]<type>
这里要注意n>=0
var a [2]int
a[0] = 1
a[1] = 2
fmt.Println(a) //[1 2]
//上边的初始化也可以写成如下的方式
c := [2]int{1,2}
fmt.Println(c) //[1 2]
//第一个元素设置为1,其他的默认
d := [2]int{1}
fmt.Println(d) //[1 0]
//创建一个大小为10的int类型数组,给索引为1的赋值为1,
//索引为6的赋值为6,注意索引是从0开始
e := [10]int{1:1,6:6}
fmt.Println(e) //[0 1 0 0 0 0 6 0 0 0]
//如果初始化的时候确定数量也可以用...来省略数量
f := [...]int{1,2,3,4}
fmt.Println(f) //[1 2 3 4]
二、不同长度的数组属于不同的类型
数组的长度也是类型的一部分,因此如果数组的长度不同他们也不是同一种类型
var a [2]int
var b [4]int
b = a // 这样会报错 cannot use a (type [2]int) as type [4]int in assignment
fmt.Println(b);
下面就是对的
var a [2]int
var b [2]int
b = a
fmt.Println(b); //[0 0] int 类型默认初始化为0
三、数组在GO语言中是值类型
数组在go语言中是值类型的,这就意味着我们在方法传递的时候实际上是对数组进行了一个copy,所有对形参的操作都不会改变原数组
package main
import "fmt"
func main(){
arr := [3]int{1, 3, 5}
changeArr(arr)
fmt.Println("main函数内:",arr)
}
func changeArr(a [3]int){
a[1] = 10
fmt.Println("changeArr函数内:",a)
}
结果
changeArr函数内: [1 10 5]
main函数内: [1 3 5]
可以看出changeArr方法并未改变原数组的值
四、数组可以使用==和!=来进行比较
arr1 := [3]int{1, 2, 3}
arr2 := [3]int{1, 2, 3}
fmt.Println(arr1 == arr2)//true
fmt.Println(arr1 != arr2)//false
arr3 := [3]int{}
arr4 := [3]int{1, 2, 3}
fmt.Println(arr3 == arr4) //false
五、GO可以创建多维的数组
var arr [3][5]int
fmt.Println(arr) //[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]