首页 > 后端开发 > Golang > 为什么我的结构更新在 Go 循环中不持久?

为什么我的结构更新在 Go 循环中不持久?

DDD
发布: 2024-11-15 11:33:02
原创
587 人浏览过

Why Aren't My Struct Updates Persistent in a Go Loop?

更新结构体中的值不起作用

尽管在循环迭代期间操作结构体中的元素,但更新在退出循环时无法持久。了解此行为背后的原因对于正确的结构操作至关重要。

问题

迭代结构体切片时,循环变量引用原始元素的副本,而不是元素本身。因此,循环内所做的任何修改只会影响副本,而不影响切片中的实际元素。

解决方案

要成功更新结构体元素,可以使用以下方法:

  • 迭代索引而不是切片:通过迭代索引,直接访问实际的结构体得到元素。这允许在循环之外持续进行修改。
  • 避免指针:更新值时不需要指向切片或元素的指针。可以直接访问切片,并且无需指针即可更新元素。

这里是遵循解决方案的更新代码片段:

type FTR struct {
    Id       string
    Mod      []Mod
}

type Mod struct {
    Name       string
    Type       string
}

for index := range ftr.Mod {
    switch ftr.Mod[index].Type {
    case "aaa", "bbbb":
        ftr.Mod[index].Type = "cccc"
    case "htr":
        ftr.Mod[index].Type = "com"
    case "no":
        ftr.Mod[index].Type = "jnodejs"
    case "jdb":
        ftr.Mod[index].Type = "tomcat"
    }
}
登录后复制

通过采用此方法,结构体元素将被成功更新,并且更改将在循环退出后持续存在。

以上是为什么我的结构更新在 Go 循环中不持久?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板