【问题标题】:Throwing away error value on string to int conversion丢弃字符串到 int 转换上的错误值
【发布时间】:2019-08-21 13:46:55
【问题描述】:

我有一个 Go 程序,我只想将字符串转换为 int。我理解这个功能:

val, err := strconv.Atoi(myValueAsAString)

有效,我可以通过以下方式检查错误:

if err != nil {
    //handle error
}

但是如果我是 100% 字符串将是一个数字,我想在 if 语句中将其转换为 int,如下所示:

if 45 + strconv.Atoi(value) >= 90 {
    //do something
}

但是 strconv.Atoi 也返回一个错误值,所以我怎样才能把它扔掉并基本上做我上面所做的,而不必在 if 语句上方定义变量并在 if 语句中使用它。我不确定这是否可能,但我很想知道。

【问题讨论】:

  • 查看可能重复的Multiple values in single-value context
  • @icza 这个问题只是问如何将字符串转换为 int。我已经知道该怎么做,我想要的是在 if 语句中执行它并丢弃错误。
  • 根据一般原则,即您确定不会发生的错误,实际上会发生,我会使用 mustXXX 包装函数,如果不能发生的错误确实发生了,则该函数会恐慌。跨度>

标签: go type-conversion


【解决方案1】:
  1. 创建一个丢弃错误结果的包装函数:
func atoi(s string) int {
    value, _ := strconv.Atoi(s)
    return value
}
if 45 + atoi(value) >= 90 {
    //do something
}
  1. 或者,将转换作为if之前的语句并忽略错误结果:
if i, _ := strconv.Atoi(value); 45 + i >= 90 {
    // do something
}

【讨论】:

  • 不错的答案。我认为第二种选择是更惯用的 Go。
  • @EmilePels:在 Go 中,不要忽略错误。这两个答案都不是惯用的。恰恰相反。两个答案都不好。
【解决方案2】:

我只是想将字符串转换为 int。

如果我是 100% 的话,字符串将是一个数字。

我想在 if 中将一串数字转换为 int 声明,如下所示:

if 45 + strconv.Atoi(value) >= 90 {
    //do something
}

如果你错了怎么办?


strconv.Atoi 编写一个简单的 Go 包装函数。在 Go 中,不要忽略错误。

// ASCII digits to integer.
func dtoi(s string) int {
    i, err := strconv.Atoi(s)
    if err != nil {
        panic(err)
    }
    return i
}

例如,

package main

import (
    "fmt"
    "strconv"
)

// ASCII digits to integer.
func dtoi(s string) int {
    i, err := strconv.Atoi(s)
    if err != nil {
        panic(err)
    }
    return i
}

func main() {
    value := "1024"
    if 45+dtoi(value) >= 90 {
        fmt.Println("do something")
    }
}

游乐场:https://play.golang.org/p/I3plKW2TGSZ

输出:

do something

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    相关资源
    最近更新 更多