### golang上提了两次issue直接被秒关,大佬们看看这段代码的输出能不能符合你们的预期,是编译器问题吗
```go
func main() {
subsets([]int{9, 0, 3, 5, 7})
}
func subsets(nums []int) (res [][]int) {
res = append(res, []int{})
for _, v := range nums {
for _, r := range res {
s := append(r, v)
res = append(res, s)
}
}
return
}
```
我的在遍历到7的时候就会出现问题
```
[[] [9] [0] [9 0] [3] [9 3] [0 3] [9 0 3] [5] [9 5] [0 5] [9 0 5] [3 5] [9 3 5] [0 3 5] [9 0 3 5]]
[]
[9]
[0]
[9 0]
[3]
[9 3]
[0 3]
[9 0 3]
[5]
[9 5]
[0 5]
[9 0 5]
[3 5]
[9 3 5]
[0 3 5]
[9 0 3 7]
```
....
问题不在for range啊
slice本身是个模拟出来的类型。
它代表的是array的一部分,array中指定的一块。
大概是 slice所属的array,slice对应的开始下标,slice对应的结束下标
cap本质就是array的最大范围
append做的是将slice 的下标向后移动若干位并插入数据。
如果cap不足(array不够大),那么就创建一个一个新的array,并将slice所属的array/下开始下标/结束下标转过去。
所以,append正常情况下,只能将append的值设到append的第一个参数上。不然一旦发生数据迁移,就会出问题。
#4
更多评论