登录
首页 >  Golang >  Go问答

修改数组元素无效

来源:stackoverflow

时间:2024-03-07 13:42:25 133浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《修改数组元素无效》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

编译器有问题或者我对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 数组已更改。

循环切片而不是数组可以满足您的期望:

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

范围创建数组(及其值)的副本,因此可以迭代它们。

如果您计划在迭代期间改变数组(或其中的一个切片),最好直接引用数组/切片 - 因为 v 值将是一个副本,并且在您的代码中是数组的旧副本。

所以尝试这样的事情:

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

Playground

好了,本文到此结束,带大家了解了《修改数组元素无效》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>