首页 >后端开发 >Golang >为什么使用Go的Range关键字修改数组元素失败,数组索引如何提供解决方案?

为什么使用Go的Range关键字修改数组元素失败,数组索引如何提供解决方案?

Barbara Streisand
Barbara Streisand原创
2024-12-17 11:23:25219浏览

Why Does Using Go's Range Keyword Fail to Modify Array Elements, and How Can Array Indices Provide a Solution?

使用数组索引代替范围值进行元素修改

在 Go 编程中,range 关键字会迭代集合并返回键以及每个元素的值的副本。此行为可能会阻碍循环内的值修改。以下示例演示了此问题:

package main

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    // Attempt to modify field using range values:
    for _, e := range array {
        e.field = "foo"
    }

    // Verify that field hasn't been modified:
    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}

在此代码中,我们尝试使用范围循环修改数组中每个元素的字段。但是,由于范围返回值的副本,因此数组中的实际元素保持不变。这会导致所有字段值保持为空。

解决方案:使用数组索引

要解决此问题并修改实际元素,您应该使用数组索引而不是range 循环返回的值。修改后的代码如下:

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    // Modify field using array indices:
    for idx, _ := range array {
        array[idx].field = "foo"
    }

    // Verify that field has been modified:
    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}

通过使用每个元素的索引而不是值,我们可以直接访问和修改数组中的实际元素。这可确保字段值正确更新。

以上是为什么使用Go的Range关键字修改数组元素失败,数组索引如何提供解决方案?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn