首页 >后端开发 >Golang >为什么我不能直接修改结构体切片上的 Go Range 循环中的值?

为什么我不能直接修改结构体切片上的 Go Range 循环中的值?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-20 17:21:14219浏览

Why Can't I Directly Modify Values in a Go Range Loop Over a Struct Slice?

为什么无法修改一系列类型结构中的值?

此编程查询源于无法更改结构化类型范围内的值Go 编程语言。要理解这个问题,需要仔细检查切片和范围在 Go 中的运行方式。

尽管您最初的方法是将数据加载到 ChartRecords 数组中,但修改循环中的值似乎没有任何效果。输出并没有反映修改后的值,而是保留原始值。

混乱源于 Go 处理切片和范围的方式。对于 for 语句中的 range 子句,Go 将迭代值分配给相应的迭代变量,但这些更改仅应用于块内。这些迭代变量是副本,而不是对原始切片元素的引用。

要对切片元素进行永久更改,必须将迭代变量中的修改值显式分配回切片。下面是更新后的代码:

for i, elem := range chartRecords {
    elem.Count = modMe(mod, i)
    chartRecords[i] = elem
}

在这个修改后的循环中,迭代变量 elem 中修改的值被分配回原始切片 ChartRecords,确保更改是持久的。

以上是为什么我不能直接修改结构体切片上的 Go Range 循环中的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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