【发布时间】:2020-04-02 01:53:31
【问题描述】:
我有这个代码:
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 事情
【问题讨论】:
-
您正在执行断言,但将结果存储回 requestHistory,即
interface{}。获取一个新变量(并给它正确的类型)。例如。如果您使用floatslice, ok := requestHistory.([]float64),则可以将floatslice与append和len和range以及任何其他可用于切片类型的内容一起使用。 -
interface{}not 表示“任何类型”。这意味着只是interface{}。 -
请在追加之前检查 requestHistory 的值,因为您尝试实现的追加可能无效,或者另一个问题是您尝试追加到错误的变量类型。请检查每个的类型变量并检查它们是否是指针引用,然后尝试追加