#《Go 语音圣经(中文版)》

#复合数据类型

#数组

数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。

因为数组的长度是固定的,因此在Go语言中很少直接使用数组。

默认情况下,数组的每个元素都被初始化为元素类型对应的零值,对于数字类型来说就是0,也可以使用数组字面值语法用一组值来初始化数组。

在数组字面值中,如果在数组的长度位置出现的是...省略号,则表示数组的长度是根据初始化值的个数来计算。

数组的长度是数组类型的一个组成部分,因此[3]int[4]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
33
34
35
36
37
38
39
// -------------------------------------------
// Created By : Onns onns@onns.xyz
// File Name : 4.1.go
// Purpose :
// Creation Date : 2021-04-15 13:31:53
// Last Modified : 2021-04-15 14:24:53
// -------------------------------------------

package main

import "fmt"

func main() {
var q [3]int = [3]int{1, 2, 3}
for i, v := range q {
fmt.Printf("%d %d\n", i, v)
}
var r [3]int = [3]int{1, 2}
for i, v := range r {
fmt.Printf("%d %d\n", i, v)
}
s := [...]int{1, 2, 3}
fmt.Printf("%T\n", s)
t := [...]int{99: -1}
fmt.Printf("%T %d\n", t, t[99])

type Currency int

const (
USD Currency = iota
EUR
GBP
RMB
)

symbol := [...]string{USD: "$", EUR: "€", GBP: "£", RMB: "¥"}
fmt.Println(RMB, symbol[RMB])
// 在这种形式的数组字面值形式中,初始化索引的顺序是无关紧要的,没用到的索引可以省略,未指定初始值的元素将用零值初始化。
}
1
2
3
4
5
6
7
8
9
10
$ go run 4.1.go
0 1
1 2
2 3
0 1
1 2
2 0
[3]int
[100]int -1
3 ¥