我收到以下错误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": "test3@example.com"}
1 回答

慕姐4208626
TA贡献1852条经验 获得超7个赞
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
- 1 回答
- 0 关注
- 244 浏览
添加回答
举报
0/150
提交
取消