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

Posted

技术标签:

【中文标题】strconv.Atoi() 给定字符串时抛出错误【英文标题】:strconv.Atoi() throwing error when given a string 【发布时间】:2016-04-29 00:12:45 【问题描述】:

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

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

但是,当我使用 reflect.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

【问题讨论】:

【参考方案1】:

错误告诉您来自strconv.Atoi 的两个返回值(interror)在单个值上下文中使用(分配给time)。将代码更改为:

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

使用blank identifier 忽略error 返回值:

   time, _ := strconv.Atoi(times)

【讨论】:

感谢这解决了这个问题。不过,在 Go 中函数可以返回不止一种类型的值,这很奇怪。哪个订单时间和错误有关系吗? @deadbeef:多次返回是该语言的基本特征之一。我建议至少通过Tour of Go 了解该语言的工作原理 @cerise 它对我有用。【参考方案2】:

虽然这个问题已经得到回答,而且这个问题已经很老了,但我认为补充接受的答案会很好。

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

num, _ := strconv.Atoi(numAsString)

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

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

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

【讨论】:

以上是关于strconv.Atoi() 给定字符串时抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

Go strconv包

Go 常用函数

C# char.isupper 在将数字放入字符串索引时抛出错误 [关闭]

Multer在通过ng-file上传上传文件时抛出奇怪的错误

正则表达式模式选择正确的子字符串,但在运行宏 vba 时抛出错误

go字符串转换