如何检查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.
我是 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.