- 数组
- 切片
- map
数组
声明数组
运行结果: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
33package main
import (
"fmt"
)
func main() {
//一维数组
var arr_1 [5] int
fmt.Println(arr_1)
var arr_2 = [5] int {1, 2, 3, 4, 5}
fmt.Println(arr_2)
arr_3 := [5] int {1, 2, 3, 4, 5}
fmt.Println(arr_3)
arr_4 := [...] int {1, 2, 3, 4, 5, 6}
fmt.Println(arr_4)
arr_5 := [5] int {0:3, 1:5, 4:6}
fmt.Println(arr_5)
//二维数组
var arr_6 = [3][5] int {{1, 2, 3, 4, 5}, {9, 8, 7, 6, 5}, {3, 4, 5, 6, 7}}
fmt.Println(arr_6)
arr_7 := [3][5] int {{1, 2, 3, 4, 5}, {9, 8, 7, 6, 5}, {3, 4, 5, 6, 7}}
fmt.Println(arr_7)
arr_8 := [...][5] int {{1, 2, 3, 4, 5}, {9, 8, 7, 6, 5}, {0:3, 1:5, 4:6}}
fmt.Println(arr_8)
}注意事项
- 数组的长度固定,
len()
和cap()
的结果是一样的 - 函数传参为值传递,传的是拷贝
Slice 切片
切片是动态数组,长度可变,可以进行追加 append()
和截取 s[x:y]
。len()
和 cap()
返回结果可能不同。
切片声明与自动扩容
1 | package main |
运行结果:
注意事项:
- 切片为引用传递
- 切片扩容会新建一个切片(容量为两倍),返回一个变量指向新的地址,原变量仍然指向旧的地址,因此可能出现扩容的地方都需要接收返回值。
Append returns the updated slice. It is therefore necessary to store the result of append, often in the variable holding the slice itself.
切片截取与拷贝
1 | package main |
运行结果:
注意事项
- 每次扩容为之前容量的两倍
- 切片直接赋值
ss := s
与切片截取后,两个指针指向同一块区域,使用copy()
进行深拷贝
map
map 也是引用传递
map声明:
1 | package main |
map操作:
1 | package main |