arrays - 更改数组元素无效

标签 arrays go

编译器或我对Go的理解有问题。我有一个奇怪的错误,并将其简化为一个简单的示例。由于某种原因,我无法在循环内直接更改数组。

    var nums [2]int
    for i, v := range nums {
        if i == 0 {
            nums[i+1]++
        } else {
            fmt.Print(v)
        }
    }

递增nums [1]然后打印出来。因此它应该打印1但它打印0。

最佳答案

在表达式中使用数组时,将获得其“值”(即数组的完整副本)。这包括在循环的范围表达式中使用数组。因此,当您打印v时,您正在打印副本,但是实际的nums数组已更改。

在 slice 而不是数组上循环可以为您带来期望:

    var nums [2]int
    for i, v := range nums[:] {
        if i == 0 {
            nums[i+1]++
        } else {
            fmt.Print(v)
        }
    }

关于arrays - 更改数组元素无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57805936/

相关文章:

go - 将Go汇编程序翻译为NASM

google-app-engine - Bitbucket Pipeline Deploy 问题到 Google App Engine

javascript - 需要检测 JS 日期中的星期日并相应地显示在数组中

java - 你必须在java中设置和获取吗?

php - 使用 CFHTTP 将 HTML 表单数组提交给 PHP

go - 为什么 go build 会因为 regexp.MustCompile 解析错误而成功?

c - 在数组 C 中的每个偶数后添加一个 0 字符

java - boolean allLess(int[]一,int[]二)方法

multithreading - go指针多线程读写错误

file - 如何检查文件或目录是否存在?