不能使用 (type interface{}) 作为类型 []Type

我有这个代码:


  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事情


哈士奇WWW
浏览 244回答 1
1回答

温温酱

这是一些奇怪的 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{}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go