迭代时更新golang数组

问题描述 投票:0回答:1

使用范围迭代数组时,如果数组已更新,则更新的位置不会使其进入将来的循环运行。以下打印“ 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中的“带有范围子句的语句”

go iteration
1个回答
0
投票

[您在这里所做的是将B[i]的值分配给变量v,然后更改B[i]的值,但是v的值保持不变,因为该值实际上已复制到v ],未引用。

您可能会看到this文章,以获取有关短变量声明及其正确用例的更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.