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中文网其他相关文章!