猿问

分配给地图的副本似乎是在修改原始地图

我有一个变量decodedToken(类型:struct),我通过类型断言访问它的一个名为“Claims”的值:

claims := decodedToken.Claims.(jwt.MapClaims)

然后我循环遍历claims(type: map[string]interface{}),并修改它的值:

  for key := range claims {
        claims[key] = "modified"+key 
    }

因此,我希望原始decodedToken变量不会发生变化,因为我刚刚对claims变量执行了操作。不过,decodedToken也改成了我修改后的值。

我的问题是为什么会这样,我该如何decodedToken保持原状?


桃花长相依
浏览 70回答 1
1回答

江户川乱折腾

由于 claims 是一个reference type,就像地图或切片一样。解决方案是使用deep copy任何引用数据。不幸的是,没有通用的方法可以在 Go 中对任何地图进行深度复制。所以你应该自己做。或者更实际的工作方式是创建一个新对象(变量)来包含修改后的decodedToken.此外,在同一语句中迭代映射并修改其值也不好。
随时随地看视频慕课网APP

相关分类

Go
我要回答