数组是同一种数据类型元素的集合,数组的索引和元素一一对应,数组长度一旦定义则不可修改

数组定义:
1
2
3
4
5
var 数组变量名 [元素数量] Type

// 定义一个长度为3元素类型为int的数组a
var a [3]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
30
31
32
//可以指定值来设置数组元素。
func main() {
var testArray [3]int //数组会初始化为int类型的零值
var numArray = [3]int{1, 2} //使用指定的初始值完成初始化
var cityArray = [3]string{"北京", "上海", "深圳"} //使用指定的初始值完成初始化
fmt.Println(testArray) //[0 0 0]
fmt.Println(numArray) //[1 2 0]
fmt.Println(cityArray) //[北京 上海 深圳]
}

//由编译器自行推断数组长度
func main() {
var testArray [3]int
var numArray = [...]int{1, 2}
var cityArray = [...]string{"北京", "上海", "深圳"}
fmt.Println(testArray) //[0 0 0]
fmt.Println(numArray) //[1 2]
fmt.Printf("type of numArray:%T\n", numArray) //type of numArray:[2]int
fmt.Println(cityArray) //[北京 上海 深圳]
fmt.Printf("type of cityArray:%T\n", cityArray) //type of cityArray:[3]string
}

//根据数组索引单独指定对应元素的值,以key:value的形式
package main
import "fmt"
func main(){
array1 := [...]int{1:1,3:3}
fmt.Println(array1)
}
//结果输出
# go run main.go
[0 1 0 3] //未指定值的元素被自动初始化为0
数组遍历
1
2
3
4
5
6
7
8
9
10
11
12
func main() {
var a = [...]string{"北京", "上海", "深圳"}
// 方法1:for循环遍历
for i := 0; i < len(a); i++ {
fmt.Println(a[i])
}

// 方法2:for range遍历
for index, value := range a {
fmt.Println(index, value)
}
}

多维数组

二维数组定义
1
2
3
4
5
6
7
8
9
func main() {
a := [3][2]string{
{"北京", "上海"},
{"广州", "深圳"},
{"成都", "重庆"},
}
fmt.Println(a) //[[北京 上海] [广州 深圳] [成都 重庆]]
fmt.Println(a[2][1]) //支持索引取值:重庆
}
二维数组遍历
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func main() {
a := [3][2]string{
{"北京", "上海"},
{"广州", "深圳"},
{"成都", "重庆"},
}
for _, v1 := range a {
for _, v2 := range v1 {
fmt.Printf("%s\t", v2)
}
fmt.Println()
}
}
//遍历数组元素的时候,如果不想使用下标,可以直接把下标index标为下划线_。index和value的名称可以自行指定,但一般是这样写
多维数组只有第一维的长度可以省略不写
1
2
3
4
5
6
7
8
9
10
11
12
//支持的写法
a := [...][2]string{
{"北京", "上海"},
{"广州", "深圳"},
{"成都", "重庆"},
}
//不支持多维数组的内层使用...
b := [3][...]string{
{"北京", "上海"},
{"广州", "深圳"},
{"成都", "重庆"},
}
数组属于值类型,赋值、和传参都会拷贝整个数组的副本,不会改变原数组的值