Golang中的数组

数组是相同数据类型的一组数据的集合,数组一旦定义长度不能修改,数组可以通过下标(或者叫索引)来访问元素。

Golang数组的定义

数组的定义语法如下:

1
var variable_name [SIZE] variable_type

variable_name:数组名称

SIZE:数组长度,必须是常量

variable_type:数组保存元素的类型

实例

先看下类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import "fmt"

func test_variable() {
var a1 [2]int
var a2 [3]string
fmt.Printf("a1: %T\n", a1)
fmt.Printf("a2: %T\n", a2)
}

func main() {
test_variable()
}

运行结果

1
2
a1: [2]int
a2: [3]string

从上面这个运行结果可以看出,数组的长度和元素类型共同组成了数组的类型。

Golang数组的初始化

初始化,就是给数组的元素赋值,没有初始化的数组,默认元素值都是零值,布尔类型是false,字符串空字符串(注意不是空格喔)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import "fmt"

func test_variable() {
var a1 [2]int
var a2 [3]string
var a3 [4]bool
var a4 [5]float32
fmt.Printf("a1: %v\n", a1)
fmt.Printf("a2: %v\n", a2)
fmt.Printf("a3: %v\n", a3)
fmt.Printf("a4: %v\n", a4)
}

func main() {
test_variable()
}

运行结果

1
2
3
4
a1: [0 0]
a2: [ ]
a3: [false false false false]
a4: [0 0 0 0 0]

使用初始化列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main

import "fmt"

func start_variable() {
var a1 = [3]int{1, 2}
fmt.Printf("a1: %v\n", a1)
var a2 = [2]string{"Hello", "World"}
fmt.Printf("a2: %v\n", a2)
var a3 = [2]bool{true, false}
fmt.Printf("a3: %v\n", a3)
}
func main() {
start_variable()
}

运行结果

1
2
3
a1: [1 2 0]
a2: [Hello World]
a3: [true false]

使用初始化列表,就是将值写在大括号内。

省略数组长度

数组长度可以省略,使用...代替,根据初始化值的数量自动推断,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import "fmt"

func lazy_variable() {
//数组的初始化,省略长度用...
var a1 = [...]int{1, 2}
fmt.Printf("a1: %v\n", a1)
fmt.Printf("len(a1): %v\n", len(a1))
var a2 = [...]string{"wei", "yun", "feng"}
fmt.Printf("a2: %v\n", a2)
fmt.Printf("len(a2): %v\n", len(a2))
}
func main() {
lazy_variable()
}

运行结果

1
2
3
4
a1: [1 2]
len(a1): 2
a2: [wei yun feng]
len(a2): 3

指定索引值的方式来初始化

可以通过指定所有的方式来初始化,未指定所有的默认为零值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main

import "fmt"

func key_variable() {
var a1 = [...]int{0: 1, 3: 100, 5: 10}
fmt.Printf("a1: %v\n", a1)
var a2 = [...]bool{0: true, 3: false, 5: true}
fmt.Printf("a2: %v\n", a2)
var a3 = [...]string{0: "wei", 2: "feng"}
fmt.Printf("a3: %v\n", a3)
}
func main() {
key_variable()
}

运行结果

1
2
3
a1: [1 0 0 100 0 10]
a2: [true false false false false true]
a3: [wei feng]

通过指定索引编号修改数组中内容

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import "fmt"

func change_variable() {
var a1 = [...]int{1, 2, 3}
fmt.Printf("a1: %v\n", a1)
a1[0] = 100
fmt.Printf("a1: %v\n", a1)
}
func main() {
change_variable()
}

运行结果

1
2
a1: [1 2 3]
a1: [100 2 3]