fmt.Scanln(&threads)
выдает ошибку, потому что ваш первый символ уже не является допустимым int, таким образом, в буфере stdin остается sd\n
, это будет моим объяснением для дополнительных трех ошибок.Чтобы избежать этого, вы можете просто прочитать строку и затем использовать int, err := strconv.Atoi(string)
, как показано в коде ниже.Обратите внимание, что fmt.Scan
или fmt.Scanln
разделяет ваш пользовательский ввод до следующего пробела, что, вероятно, не идеально для вашего варианта использования.Проверьте Как читать ввод с консоли , чтобы узнать, как выбрать подходящий вариант использования.
package main
import (
"fmt"
"strconv"
)
func main() {
var s string
var i int
fmt.Println("Enter number of threads:")
for {
_, err := fmt.Scan(&s)
i, err = strconv.Atoi(s)
if err != nil {
fmt.Println("Enter a valid number")
} else {
fmt.Println("Got: " + strconv.Itoa(i))
break
}
}
//Todo
}