不能使用(类型接口{})作为类型[]类型

问题描述 投票:-1回答:1

我有此代码:

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

go casting slice
1个回答
0
投票

这是一些奇怪的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{}

© www.soinside.com 2019 - 2024. All rights reserved.