我有这个代码: requestHistory := claims["request_history"] if requestHistory == nil { requestHistory = []float64{} } requestHistory, ok = requestHistory.([]float64) if !ok { return getBytes(http.StatusForbidden, cptypes.ErrorResponseData{ ErrId: "7d700df9-6cc9-447c-a8ce-37701fd71a8c", Reason: "missing created_at value in jwt claims.", }) } requestHistory = append(requestHistory, float64(time.Now().Unix())) // error here! if len(requestHistory) > 25 { // error here too! // }我无法弄清楚为什么会收到此错误:不能使用“requestHistory”(类型接口{})作为类型 []Type和len 的参数无效这种重新分配似乎很明显: requestHistory, ok = requestHistory.([]float64)是不是实际上在范围下面呢?这里发生了非常奇怪的golang事情
1 回答

温温酱
TA贡献1752条经验 获得超4个赞
这是一些奇怪的 golang 事情:
requestHistory := claims["request_history"] // 1
if requestHistory == nil {
requestHistory = []float64{}
}
requestHistory, ok = requestHistory.([]float64) // 2
标记为 // 2 的行不会将变量重新分配给新类型,它保持interface{}从第 // 1 行声明的原始类型
最终这就是编程错误的原因,正确的做法是从这里开始:
requestHistory, ok := claims["request_history"].([]interface{})
claims类型在哪里map[string]interface{}
- 1 回答
- 0 关注
- 222 浏览
添加回答
举报
0/150
提交
取消