数组的声明
var a [3]int // 声明并初始化为默认值
a[0] = 1
b := [3]int{1,2,3} // 声明同时初始化
c := [2][3]int{{1,2}, {3,4}}
数组的截取
a[开始索引(包含), 结束索引(不包含)]
a := [...]int{1,23,3,4,5}
a[1:2] // 23
a[1:3] // 2,3
a[1:len(a)] // 23,3,4,5
a[1:] // 23,3,4,5
a[:3] // 1,2,3
切片内部结构
切片的声明
var s0 []int
t.Log(len(s0), cap(s0))
s0 = append(s0, 1)
t.Log(len(s0), cap(s0))
s1 := []int{1, 2, 3, 4}
t.Log(len(s1), cap(s1))
s2 := make([]int, 3, 5)
t.Log(len(s2), cap(s2))
t.Log(s2[0], s2[1], s2[2], s2[3])
s2 = append(s2, 1)
t.Log(s2[0], s2[1], s2[2], s2[3])
t.Log(len(s2), cap(s2))
切片共享存储结构
func TestSliceGrowing(t *testing.T) {
s := []int{}
for i := 0; i < 10; i++ {
s = append(s, i)
t.Log(len(s), cap(s))
}
}
func TestSliceShareMemory(t *testing.T) {
year := []string{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
Q2 := year[3:6]
t.Log(Q2, len(Q2), cap(Q2))
summer := year[5:8]
t.Log(summer, len(summer), cap(summer))
summer[0] = "Unknown"
t.Log(Q2)
t.Log(summer)
t.Log(year)
}
数组 VS 切片
- 容量是否可伸缩
- 是否可以进行比较
func TestSliceCompaing(t *testing.T) {
a := []int{1, 2, 3, 4}
b := []int{1, 2, 3, 4}
if a == b { // 直接就报错:slice can only be compared to nil
t.Log("equal")
}
}