如何检查Scanln是否在Golang中抛出错误

时间:2015-03-17 10:36:52

标签: go panic

我是Go的新手。我一直在寻找答案,我知道确实有一个我还没找到答案。

为了更好地解释我的问题,这是我的代码:

func main() {

    ...

    inputs := new(Inputs)

    fmt.Println("Input two numbers: ")

    fmt.Scanln(&inputs.A)
    fmt.Scanln(&inputs.B)

    fmt.Println("Sum is:", inputs.A + inputs.B)
}

这是我的结构:

type Inputs struct {
    A, B int
}

如果我要输入' 123'输入A和另一个' 123'对于输入B,我的输出为" 总和为:246 "。但如果我错误地输入' 123j' ,它将不再有效,因为A和B只接受int(s)。

现在,如何从 fmt.Scanln 中抓住恐慌还是有办法吗?提前谢谢。

1 个答案:

答案 0 :(得分:6)

Scanln returns values ... 不要忽略它们

你忽略了两个重要的回归值。扫描计数和错误..如果有的话。

n, err := fmt.Scanln(&inputs.A)

...会告诉你需要检查的内容。 err会告诉您预计会出现换行符,因为您已尝试将该值存储在int ..以及errors when the last character in the available value isn't a newline中。