此编程查询源于无法更改结构化类型范围内的值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中文网其他相关文章!