我是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 中抓住恐慌还是有办法吗?提前谢谢。
答案 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中。