如何更新地图中的结构属性[重复]

问题描述 投票:-2回答:1

这个问题在这里已有答案:

目前正在努力学习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
    }
}

我已经更新了函数,只是将现有记录替换为具有我想要的值的全新结构,但这似乎很奇怪,我无法更新地图中的值。

有人可以向我解释一下,还是指出我正确的方向?

dictionary go
1个回答
0
投票

你有一张stringTeamRow值的地图,所以当你从地图中得到val时,它会返回团队的价值,而不是指向团队的指针。如果你使地图成为TeamRow指针的字符串,那么当你得到val时,它将指向存储在地图中的内存,因此值将持续超出AddLoss函数的范围。要做到这一点,只需在地图声明中添加一个* - teamMap map[string]*TeamRow,但是当你填充它时,你还需要在地图中存储指针。

© www.soinside.com 2019 - 2024. All rights reserved.