首页 > 后端开发 > Golang > 如何在 Go 中更新嵌套结构体值?

如何在 Go 中更新嵌套结构体值?

Susan Sarandon
发布: 2024-12-05 14:46:10
原创
216 人浏览过

How to Update Nested Struct Values in Go?

在 Go 中更新结构体值

在 Go 中,结构体是值类型,这意味着将一个结构体分配给另一个结构体会复制其值,而不是创建参考。当尝试修改嵌套结构中的值时,这可能会导致意外行为。

考虑以下代码片段:

ftr := FTR{}

err := yaml.Unmarshal([]byte(yamlFile), &ftr)

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

目的是更新每个 Mod 元素的 Type 字段ftr 结构基于一系列条件。但是,在代码执行后,每个元素的 Type 字段保持不变。

此行为是由于 range 循环迭代 ftr.Mod 切片的副本而导致的。因此,对循环内的元素变量所做的任何修改都不会反映在原始 ftr.Mod 切片中。

要解决此问题并正确更新 ftr 结构中的值,您可以使用基于索引的迭代而不是在切片上进行范围调整。这允许您直接修改原始切片中的值:

type FTR struct {
    Id       string     
    Mod      []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.Mod 切片的索引并直接修改相应的元素,您可以确保原始 ftr 结构更新为有意为之。

以上是如何在 Go 中更新嵌套结构体值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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