首页 >后端开发 >Golang >为什么修改 Go Range 循环中的结构体不会改变原始切片?

为什么修改 Go Range 循环中的结构体不会改变原始切片?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-25 08:38:11393浏览

Why Doesn't Modifying a Struct in a Go Range Loop Change the Original Slice?

为什么我不能更改一系列类型结构中的值?

Go 编程语言规范规定,对于带有 a 的语句range 子句,“对于每个条目,它会将迭代值分配给相应的迭代变量(如果存在),然后执行块。”

在这种情况下,您使用 range 语句迭代结构切片。当你修改范围内结构体的字段时,你只是修改了迭代变量,而不是切片中的底层结构。

要修改底层结构,你需要直接使用索引来访问它迭代变量。

例如,以下代码正确修改切片中的值:

for i, elem := range chartRecords {
    elem.Count = modMe(mod, i)
    chartRecords[i] = elem
    fmt.Printf("No: %2d | Count: %2d | Name = %s\r\n", i, elem.Count, elem.Name)
}

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

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