考慮以下最小示例:package mainimport "fmt"type runner interface { s1(int) s2(int)}type test struct { x1 []int x2 []int}func (t test) s1(v int) { t.x1 = append(t.x1, v) t.s2(v)}func (t test) s2(v int) { t.x2[v] = v}func main() { t := test{ x1: make([]int, 0), x2: make([]int, 10)} for i := 0; i < 10; i++ { t.s1(i) } fmt.Println(t)}現在如果你運行它,你將得到如下結果:{[] [0 1 2 3 4 5 6 7 8 9]}這意味著該x1數組永遠不會被填充。或者實際上,它是,但每次s1函數退出時都會重置。s2將項目放入預定義的數組中效果很好。有誰知道這里到底發生了什么?是因為數組修改的范圍嗎?這似乎有點違反直覺。PS 我確實明白 x1 是一個切片,其中 x2 是一個實際的預定義數組。我自己的理論是,如果您使用“切片”,它們只能在特定范圍內更改,而不能在其他任何地方更改。
范圍的奇怪行為
慕尼黑8549860
2023-08-07 15:19:52