我有一個變量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 關注
- 95 瀏覽
添加回答
舉報
0/150
提交
取消