首页  >  文章  >  后端开发  >  为什么在 Go 中使用切片时我的结构更新不保留?

为什么在 Go 中使用切片时我的结构更新不保留?

Linda Hamilton
Linda Hamilton原创
2024-11-19 05:54:03608浏览

Why Don't My Struct Updates Persist When Using a Slice in Go?

FTR 结构体更新问题

在 Go 中,使用结构体和切片时,理解引用和复制的概念至关重要。

考虑提供的代码,其中用户尝试使用以下命令更新 ftr 结构中的值一个循环。调试表明,虽然执行 switch case 并对循环内的元素进行更改,但这些更改不会在循环外持续存在。

问题源于这样一个事实:在迭代 Mod 切片时,获得的元素是切片中实际元素的副本。因此,对此副本所做的任何修改都不会影响原始值。

解决方案

要解决此问题,建议修改代码,如下所示:

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"
    }
}

在此修改版本中,我们不是迭代指向元素的指针,而是迭代切片中的索引并直接修改值切片中的元素。这可确保循环内所做的更改反映在原始 ftr 结构中。

以上是为什么在 Go 中使用切片时我的结构更新不保留?的详细内容。更多信息请关注PHP中文网其他相关文章!

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