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

Dictionary 如何更新映射中的结构属性,dictionary,go,Dictionary,Go,目前正在努力学习围棋 我有下面的函数,但它只在团队不存在于地图中并且它在地图中创建新记录时才起作用。如果团队在映射中已有结构,则不会更新值 func AddLoss(teamMap map[string]TeamRow, teamName string) { if val, ok := teamMap[teamName]; ok { val.Wins++ val.GamesPlayed++ } else { newTeamRow :

目前正在努力学习围棋

我有下面的函数,但它只在团队不存在于地图中并且它在地图中创建新记录时才起作用。如果团队在映射中已有结构,则不会更新值

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[string]*TeamRow
,但当您填充它时,您还需要在地图中存储指针。

什么意思是“它只在团队不存在时才起作用”?当它确实存在时会发生什么?观察到的行为到底是什么?您可能需要使用
*TeamRow
而不是
TeamRow
。请按照前面的注释中的建议使用*TeamRow,或者将该值赋回地图。请参见,…@Flimzy观察到的值未更新。该对象保留了最初创建时指定的相同属性值。@ThunderCat感谢您提供的链接,这非常有意义。谢谢您!
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
    }
}