这个问题在这里已有答案:
目前正在努力学习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
}
}
我已经更新了函数,只是将现有记录替换为具有我想要的值的全新结构,但这似乎很奇怪,我无法更新地图中的值。
有人可以向我解释一下,还是指出我正确的方向?
你有一张string
到TeamRow
值的地图,所以当你从地图中得到val
时,它会返回团队的价值,而不是指向团队的指针。如果你使地图成为TeamRow
指针的字符串,那么当你得到val时,它将指向存储在地图中的内存,因此值将持续超出AddLoss
函数的范围。要做到这一点,只需在地图声明中添加一个*
- teamMap map[string]*TeamRow
,但是当你填充它时,你还需要在地图中存储指针。