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

How to check if Scanln throws an error in Golang

我是 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
}

如果我为输入 A 输入“123”,为输入 B 输入另一个“123”,我将得到输出“总和为:246 ”。但是如果我错误地输入 '123j' ,它将不再起作用,因为 A 和 B 只接受 int(s)。

现在,如何捕捉来自 fmt.Scanln 的恐慌或者有什么办法吗?提前致谢。

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

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

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

...将为您提供您需要检查的内容。 err 会告诉您需要换行符但未找到 .. 因为您已尝试将值存储在 int .. 并且它 errors when the last character in the available value isn't a newline.