我有这个代码:
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事情在这里发生
最佳答案
这是一些奇怪的golang事情:
requestHistory := claims["request_history"] // 1
if requestHistory == nil {
requestHistory = []float64{}
}
requestHistory, ok = requestHistory.([]float64) // 2
标记为// 2的行不会将变量重新分配为新类型,它会保留从// // 1行声明的
interface{}
的原始类型最终这就是为什么编程错误,正确的方法是从这里开始:
requestHistory, ok := claims["request_history"].([]interface{})
其中
claims
是map[string]interface{}
类型