我有一個變數decodedToken(型別:結構),我通過型別斷言訪問它的一個名為“Claims”的值:
claims := decodedToken.Claims.(jwt.MapClaims)
然后我回圈遍歷claims(type: map[string]interface{}),并就地修改它的值:
for key := range claims {
claims[key] = "modified" key
}
因此,我希望原始decodedToken變數不會改變,因為我剛剛對claims變數執行了操作。不過,decodedToken也改成我修改的值。
我的問題是為什么會這樣,我該如何decodedToken保持原樣?
uj5u.com熱心網友回復:
由于 claim 是一個reference type,就像一個地圖或切片。
解決方案是使用deep copy任何參考的資料。不幸的是,沒有通用的方法可以在 Go 中制作任何地圖的深拷貝。所以你應該自己做。
或者更實用的方法是創建一個新物件(變數)來包含修改后的decodedToken.
此外,迭代地圖并在同一陳述句中修改其值也不好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/496562.html
下一篇:為什么要在鏈表中宣告指標?
