-4

我是 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”,我将得到“ Sum is: 246 ”的输出。但是如果我错误地输入'123j',它将不再起作用,因为 A 和 B 只接受 int(s)。

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

4

1 回答 1

7

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

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

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

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

于 2015-03-17T10:40:03.820 回答