登录
首页 >  Golang >  Go问答

如何更新映射中的结构属性

来源:stackoverflow

时间:2024-03-16 23:36:27 133浏览 收藏

**文章首段摘要** 本指南旨在为 Go 初学者解决一个常见问题:如何在映射中更新结构属性。在映射中存储结构时,通常遇到的困难是无法直接更新结构的属性。本指南将深入探讨此问题,并提供一种优雅的解决方案,允许开发者通过指针间接更新映射中的结构属性。这种方法不仅有效,而且符合 Go 语言的最佳实践,确保了映射中的数据始终是最新的。

问题内容

目前正在尝试学习 go。

我有以下功能,但它仅在地图中不存在该团队并在地图中创建新记录时才有效。如果团队在地图中已有结构,则不会更新值。

func AddLoss(teamMap map[string]TeamRow, teamName string) {
    if val, ok := teamMap[teamName]; ok {
        val.Wins++
        val.GamesPlayed++
    } else {
        newTeamRow := TeamRow{Losses: 1}

        teamMap[teamName] = newTeamRow
    }
}

我已经更新了该函数,仅用带有我想要的值的全新结构替换现有记录,但这似乎很奇怪,我无法更新地图中的值。

有人可以向我解释一下这一点,或者为我指出正确的方向吗?


解决方案


您有一个 stringTeamRow 值的映射,因此当您从映射中获取 val 时,它返回团队的值,而不是指向团队的指针。如果您将映射设置为指向 TeamRow 指针的字符串,那么当您取出 val 时,它将指向存储在映射中的内存,因此值将持续超出 AddLoss 函数的范围。为此,只需将 * 添加到地图声明中 - teamMap map[string]*TeamRow,但在填充它时,您还需要在地图中存储指针。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>