我收到以下錯誤
panic: interface conversion: interface {} is float64, not int64
我不確定 float64 來自哪里 我將型別設定為 int64 但不確定 float64 來自哪里
type AccessDetails struct {
AccessUuid string `json:"access_uuid"`
Email string `json:"email"`
Refresh int64 `json:"refresh"`
Expiry int64 `json:"expiry"`
Permission string `json:"permission"`
Scope string `json:"scope"`
}
func GetAccessDetails(c *fiber.Ctx) (*AccessDetails, error) {
ad := &AccessDetails{}
cookie := c.Cookies("access_token")
var err error
token, err := jwt.Parse(cookie, func(token *jwt.Token) (interface{}, error) {
return []byte(os.Getenv("ACCESS_SECRET")), nil
})
if err != nil {
return nil, err
}
payload := token.Claims.(jwt.MapClaims)
ad.Email = payload["sub"].(string)
ad.AccessUuid = payload["access_uuid"].(string)
ad.Refresh = payload["refresh"].(int64)
ad.Expiry = payload["exp"].(int64)
ad.Permission = payload["permission"].(string)
ad.Scope = payload["scope"].(string)
return ad, nil
}
錯誤似乎來自ad.Refresh = payload["refresh"].(int64)
我認為我只需要知道如何將型別從 float64 轉換為 int64 的行,反之亦然,用于介面 {}
我已經嘗試了一切將型別更改回 int64 的方法,但是我遇到了一個錯誤,現在需要幫助才能繼續前進
這是 cookie 中的有效負載資料在 jwt 解碼后的樣子的示例
{
"access_uuid": "c307ac76-e591-41d0-a638-6dcc2f963704",
"exp": 1642130687,
"permission": "user",
"refresh": 1642734587,
"sub": "[email protected]"
}
uj5u.com熱心網友回復:
ad.Refresh = int64(payload["refresh"].(float64))
ad.Expiry = int64(payload["exp"].(float64))
您需要首先斷言介面值的準確動態型別,然后,如果成功,您可以將其轉換為您想要的型別。
請注意,介面值的原因float64是因為這是encoding/json解碼器在將 JSON 數字解組為interface{}值時的默認設定。
為了將 JSON 解組為介面值,Unmarshal 將其中一項存盤在介面值中:
bool, for JSON booleans float64, for JSON numbers string, for JSON strings []interface{}, for JSON arrays map[string]interface{}, for JSON objects nil for JSON null
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/414541.html
標籤:
