为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
桃花长相依 2022-12-26 16:39:03
我有一个变量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保持原状?
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

由于 claims 是一个reference type,就像地图或切片一样。

解决方案是使用deep copy任何引用数据。不幸的是,没有通用的方法可以在 Go 中对任何地图进行深度复制。所以你应该自己做。

或者更实际的工作方式是创建一个新对象(变量)来包含修改后的decodedToken.

此外,在同一语句中迭代映射并修改其值也不好。


查看完整回答
反对 回复 2022-12-26
  • 1 回答
  • 0 关注
  • 58 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信