我收到以下錯誤panic: interface conversion: interface {} is float64, not int64我不確定 float64 來自哪里 我將類型設(shè)置為 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 轉(zhuǎn)換為 int64 的行,反之亦然,用于接口 {}我已經(jīng)嘗試了一切將類型更改回 int64 的方法,但是我遇到了一個錯誤,現(xiàn)在需要幫助才能繼續(xù)前進這是 cookie 中的有效負載數(shù)據(jù)在 jwt 解碼后的樣子的示例{ "access_uuid": "c307ac76-e591-41d0-a638-6dcc2f963704", "exp": 1642130687, "permission": "user", "refresh": 1642734587, "sub": "test3@example.com"}
1 回答

慕姐4208626
TA貢獻1852條經(jīng)驗 獲得超7個贊
ad.Refresh = int64(payload["refresh"].(float64)) ad.Expiry = int64(payload["exp"].(float64))
您需要首先斷言接口值的準(zhǔn)確動態(tài)類型,然后,如果成功,您可以將其轉(zhuǎn)換為您想要的類型。
請注意,接口值的原因float64
是因為這是encoding/json
解碼器在將 JSON 數(shù)字解組為interface{}
值時的默認設(shè)置。
為了將 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
- 1 回答
- 0 關(guān)注
- 242 瀏覽
添加回答
舉報
0/150
提交
取消