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 關注
- 146 瀏覽
添加回答
舉報