我有這個代碼: 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 的參數(shù)無效這種重新分配似乎很明顯: requestHistory, ok = requestHistory.([]float64)是不是實際上在范圍下面呢?這里發(fā)生了非常奇怪的golang事情
1 回答

溫溫醬
TA貢獻(xiàn)1752條經(jīng)驗 獲得超4個贊
這是一些奇怪的 golang 事情:
requestHistory := claims["request_history"] // 1
if requestHistory == nil {
requestHistory = []float64{}
}
requestHistory, ok = requestHistory.([]float64) // 2
標(biāo)記為 // 2 的行不會將變量重新分配給新類型,它保持interface{}從第 // 1 行聲明的原始類型
最終這就是編程錯誤的原因,正確的做法是從這里開始:
requestHistory, ok := claims["request_history"].([]interface{})
claims類型在哪里map[string]interface{}
- 1 回答
- 0 關(guān)注
- 233 瀏覽
添加回答
舉報
0/150
提交
取消