使用范围迭代数组时,如果数组已更新,则更新的位置不会使其进入将来的循环运行。以下打印“ 1 2”而不是“ 1 0”
package main
import (
"fmt"
)
func main() {
var B = [2]int{1, 2}
for i, v := range B {
if i == 0 {
B[1] = 0
}
fmt.Print(v, " ")
}
}
https://play.golang.org/p/0zZY6vjxwut
看起来好像数组在迭代之前就已被复制。
规范的哪一部分描述了此行为?请参见“ https://golang.org/ref/spec#For_range中的“带有范围子句的语句”
[您在这里所做的是将B[i]
的值分配给变量v
,然后更改B[i]
的值,但是v
的值保持不变,因为该值实际上已复制到v
],未引用。
您可能会看到this文章,以获取有关短变量声明及其正确用例的更多详细信息。