Go基础之数组

数组的定义

var 数组变量名 [元素数量]T

例如:

定义一个长度是 10 元素类型是 int 的数组 ages

var ages [10]int

定义一个长度是 10 元素类型是 string 的数组 names

var names [10]string

数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。

数组的初始化

指定长度

1
2
3
4
5
6
7
// 声明了一个变量ages, 它是[10]int类型
var ages1 [10]int
// [0 0 0 0 0 0 0 0 0 0]
fmt.Println(ages1)
var ages2 = [10]int{1, 2, 3, 4, 5}
// [1 2 3 4 5 0 0 0 0 0]
fmt.Println(ages2)

不指定长度, 使用...让编译器根据初始值的个数自行推断数组的长度

1
2
3
var ages3 = [...]int{1, 2, 3, 4, 5}
// [1 2 3 4 5]
fmt.Println(ages3)

使用索引的方式

1
2
3
var ages4 = [...]int{1: 1, 9: 10}
// [0 1 0 0 0 0 0 0 0 10]
fmt.Println(ages4)

数组的遍历

1
2
3
4
5
6
7
8
9
var nums = [...]int{1, 2, 3, 4, 5}
// for循环
for i := 0; i < len(nums); i++ {
fmt.Println(nums[i])
}
// for range循环
for index, value := range nums {
fmt.Println(index, value)
}

多维数组

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

// 二维数组
var a1 [3][2]int
a1 = [3][2]int{
[2]int{1, 2},
[2]int{3, 4},
[2]int{5, 6},
}
// [[1 2] [3 4] [5 6]]
fmt.Println(a1)

// 多维数组只有外层的数组可以使用...
var a2 = [...][2]int{
[2]int{1, 2},
[2]int{3, 4},
[2]int{5, 6},
}
// [[1 2] [3 4] [5 6]]
fmt.Println(a2)

数组是值类型

赋值和传参会复制整个数组,因此改变副本的值,不会改变本身的值。

学习资料

  1. https://www.bilibili.com/video/BV1fz4y1m7Pm/?p=20
  2. https://www.liwenzhou.com/posts/Go/05_array/

我的环境

  • Mac
  • go1.19
  • GoLand