go array 操作

数组初始化

a := [...]int{1, 2}
var b [2]int
b = a
fmt.Println(b)

指针数组

c := [...]int{99: 1}
var p *[100]int = &c
c[0] = 100
fmt.Println(p)

数组的比较

a := [2]int{1, 2}
b := [2]int{1, 2}

fmt.Println(a == b)

数组之间不可以做大于小于的比较, 但是可以做 ==!= 的比较(必须长度,类型都相同才行)

new 一个数组:

a := [10]int{}
a[1] = 2
p := new([10]int)
p[1] = 2
fmt.Println(a)
fmt.Println(p)

多维数组:

a := [2][3]int{
	{1, 1, 2: 2},
	{2, 2, 2}}
fmt.Println(a)

多维数组第一个括号内数字可以省略

a := [...][3]int{
	{1, 1, 1},
	{2, 2, 2}}
fmt.Println(a)

切片

a := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
fmt.Println(a)
s := a[:5]
fmt.Println(s)

使用 make 初始化 slice:

//make(类型,大小, 容量)
s := make([]int, 3, 10)
fmt.Println(s, len(s), cap(s))

数组和切片的容量:

a := [3]int{1, 2, 3}
b := a[1:]
c := b[1:]
fmt.Println(a, len(a), cap(a))
fmt.Println(b, len(b), cap(b))
fmt.Println(c, len(c), cap(c))

append 导致重新分配空间,reslice的切片和原始切片不在同一地址,修改s1切片不会改变s2切片

a := []int{1, 2, 3, 4, 5}
s1 := a[2:5]
s2 := a[1:3]
fmt.Println(s1, s2)
s2 = append(s2, 6, 7, 8, 9, 0)
s1[0] = 9
fmt.Println(s1, s2)

copy 函数使用

s1 := []int{1, 2, 3, 4, 5, 6}
s2 := []int{7, 8, 9}
copy(s2, s1)
fmt.Println(s2)
输出:
	[1 2 3]