2 回答
TA贡献1848条经验 获得超2个赞
发生这种情况是因为切片val包含指向其子切片的指针,而不是子切片本身。在您的代码中,您最初放置了一个指向valuesin positions的指针val[0]。然后你修改values然后设置一个指向valuesin 的指针val[1]。但是val[0]和都val[1]指向相同的基础对象 ( values),该对象已被修改。
您可以通过在外循环的每次迭代中创建一个新values切片来解决此问题,这样每个子切片都val将是不同的切片。
例如:
func main() {
val := make([][]int, 2)
for i:=0; i<2; i++ {
values := make([]int, 0, 100)
for j:=0; j<2; j++ {
values = append(values, i+j)
}
val[i] = values
fmt.Println(values, val) //
}
fmt.Println(val)
}
输出自fmt.Println:
[0 1] [[0 1] []] // values, val
[1 2] [[0 1] [1 2]] // values, val
[[0 1] [1 2]] // val
TA贡献1804条经验 获得超3个赞
您应该在 for 循环中初始化值,values = []int{}
代码如下:
package main
import (
"fmt"
)
func main() {
var (
valLength = 2
)
val := make([][]int, valLength)
for i := 0; i < valLength; i++ {
values := []int{}
for j := 0; j < 2; j++ {
values = append(values, i+j)
}
val[i] = values
fmt.Println(values, val) //
}
fmt.Println(val)
}
而且您只需更改变量valLength即可获得所需的任何长度的切片。
- 2 回答
- 0 关注
- 109 浏览
添加回答
举报