我有一个变量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
.
此外,在同一语句中迭代映射并修改其值也不好。
- 1 回答
- 0 关注
- 69 浏览
添加回答
举报
0/150
提交
取消