我一直在尝试切片。这是一个示例程序
for n := 1; n <= 10; n++ {
a := make([]int, 0)
for j := 0; j < n; j++ {
a = append(a, 0)
}
b := a[:1]
a = append(a, 0)
a[0] = 1
fmt.Println(n, b[0])
}
输出是
1 0
2 0
3 1
4 0
5 1
6 1
7 1
8 0
9 1
10 1
我明白这里发生了什么。a = append(a, 0)如果旧数组的长度不足,则该行分配一个新数组,并且新数组的长度是原始数组的两倍。因此,如果n是 2 的幂,则这条线
a[0] = 1
不会更改所支持的数组,b因为新数组将在之前的行中分配。
但是,我在文档中找不到明确声明新分配的数组始终具有两倍的长度。这是否意味着我的代码依赖于实现?以这种方式将另一个切片的切片存储在变量中是不好的做法,还是应该a[j:k]每次需要子切片时都这样做?
慕码人2483693
慕标琳琳
相关分类