strconv.Atoi()在给定字符串时抛出错误

时间:2016-04-29 00:12:45

标签: string go atoi strconv

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

  

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

然而,当我做反射.TypeOf我得到字符串作为类型,我理解的是正确的参数类型。

我一直在努力解决这个问题几个小时。我很快就会对这个问题感到非常沮丧。我终于决定寻求帮助了。任何反馈都将不胜感激。

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
}

2 个答案:

答案 0 :(得分:38)

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

   time, err := strconv.Atoi(times)
   if err != nil {
      // handle error
   }

答案 1 :(得分:2)

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

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

num, _ := strconv.Atoi(numAsString)

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

但是请注意,一旦将值分配给_,就不能再次引用它。即

num, _ := strconv.Atoi(numAsString)
fmt.Println(_) // won't compile. cannot reference _