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

sym*_*ian -4 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)
}
Run Code Online (Sandbox Code Playgroud)

这是我的结构:

type Inputs struct {
    A, B int
}
Run Code Online (Sandbox Code Playgroud)

如果我输入'123'表示输入A而另一个'123'表示输入B,我将输出" Sum is:246 ".但是如果我错误地输入'123j',它将不再有效,因为A和B只接受int(s).

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

Sim*_*ead 6

Scanln返回值 ... 不要忽略它们.

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

n, err := fmt.Scanln(&inputs.A)
Run Code Online (Sandbox Code Playgroud)

...会给你你需要检查的东西.err会告诉你一个换行符是预期的并且没有找到..因为你试图将值存储在int..中,当可用值中的最后一个字符不是换行符时它会出错.