跳转至

数组与 Slice:长度固定和动态视图

数组长度是类型的一部分,[3]int[4]int 是不同类型。业务代码更常使用 slice:它是对底层数组一段连续区域的描述,长度可变。

array := [3]int{1, 2, 3}
items := []int{1, 2, 3}
items = append(items, 4)
fmt.Println(len(items), cap(items))

slice 通过 len 获取当前元素数,通过 cap 获取从起始位置到底层数组末尾的容量。append 可能复用原数组,也可能分配新数组;不要假设 append 后两个 slice 一定共享或一定不共享底层数组。

切片共享底层数组

base := []int{1, 2, 3}
part := base[:2]
part[0] = 9
fmt.Println(base) // [9 2 3]

需要独立副本时使用 copy

clone := make([]int, len(base))
copy(clone, base)

参考

评论