我是新手。我一直在寻找答案,我知道确实有一个我只是没有找到答案。
为了更好地解释我的问题,这是我的代码:
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 ...不要忽略它们。
您将忽略两个重要的返回值。扫描计数和一个错误..如果有一个。
n, err := fmt.Scanln(&inputs.A)
...会给您您需要检查的内容。
err
会告诉您期望换行,但未找到换行..因为您已尝试将值存储在int
中,并将其存储在errors when the last character in the available value isn't a newline中。关于go - 如何检查Scanln是否在Golang中引发错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29096916/