25

当尝试对通过 URL 传递的变量(GET 变量命名时间)使用 strconv 时,GoLang 编译失败,说明如下:

单值上下文中的多值 strconv.Atoi()

但是,当我做 reflect.TypeOf 时,我得到 string 作为类型,据我了解,这是正确的参数类型。

几个小时以来,我一直在尝试解决这个问题。我是新手,对这个问题感到非常沮丧。我终于决定寻求帮助。对于任何反馈,我们都表示感谢。

func numbers(w http.ResponseWriter, req *http.Request) {
  fmt.Println("GET params were:", req.URL.Query()); 
  times := req.URL.Query()["times"][0]
  time := strconv.Atoi(times)

  reflect.TypeOf(req.URL.Query()["times"][0]) // returns string
}
4

2 回答 2

65

该错误告诉您strconv.Atoi(interror) 的两个返回值用于单个值上下文(对 的赋值time)。将代码更改为:

   time, err := strconv.Atoi(times)
   if err != nil {
      // Add code here to handle the error!
   }

使用空白标识符忽略error返回值:

   time, _ := strconv.Atoi(times)
于 2016-04-29T00:22:01.310 回答
12

尽管已经回答了这个问题并且这个问题已经很老了,但我认为补充接受的答案会很好。

当函数返回问题中的多个值时,如果不需要任何值,则可以使用空白标识符 _将其丢弃,如下所示。

num, _ := strconv.Atoi(numAsString)

这将存储转换后的数字,num但通过将错误分配给空白标识符来丢弃错误。

但请注意,一旦分配了一个值,_就不能再次引用它。IE

num, _ := strconv.Atoi(numAsString)
fmt.Println(_) // won't compile. cannot reference _
于 2019-09-18T07:08:34.243 回答