我有此代码:
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{}