代码:
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter a number")
input,_ := reader.ReadString('\n')
fmt.Printf("Type of the entered value is %T\n",input)
fmt.Println(input)
out,_ := strconv.Atoi(input)
fmt.Printf("Type now is: %T\n", out)
fmt.Printf("Value now is %d\n",out)
fmt.Println(out)
Run Code Online (Sandbox Code Playgroud)
Golang 的完全初学者。我试图解决 r/dailyprogrammer 的问题之一。我使用代码片段读取 SO 的输入以及 strconv.Atoi 函数。该函数的示例很有意义,但是当我将其应用于从 stdin 读取的输入时,它给了我 0。
如果您稍微更改代码,您会发现strconv.Atoi(input)返回错误。我希望您现在已经学到了有关 Go 如何进行错误处理的重要课程。
错误是:strconv.Atoi:解析“1\n”:语法无效
out, err := strconv.Atoi(input)
if err != nil {
fmt.Printf("Error is: %v\n", err)
}
Run Code Online (Sandbox Code Playgroud)
解决此问题的一种方法是input使用strings.TrimSuffix()进行修剪:
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter a number")
input, _ := reader.ReadString('\n')
input = strings.TrimSuffix(input, "\n")
fmt.Printf("Type of the entered value is %T\n", input)
fmt.Println(input)
out, err := strconv.Atoi(input)
if err != nil {
fmt.Printf("Error is: %v\n", err)
}
fmt.Printf("Type now is: %T\n", out)
fmt.Printf("Value now is %d\n", out)
fmt.Println(out)
Run Code Online (Sandbox Code Playgroud)
您还可以使用Scanner,它不需要您删除\n:
scanner := bufio.NewScanner(os.Stdin)
fmt.Print("Enter a number")
scanner.Scan()
input := scanner.Text()
Run Code Online (Sandbox Code Playgroud)