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]
|