
Баг: Недостаточно аргументов для Scanln
// ❌ Запросили 2 значения, а пользователь ввел 1
var name string
var age int
n, err := fmt.Scanln(&name, &age)
// Пользователь ввел: "John" [Enter]
// err != nil (unexpected newline)
// n = 1 (успел прочитать только name)
// ❌ Плохая обработка - программа падает или игнорирует
if err != nil {
// забыли обработать
}
// ✅ Правильная обработка
n, err := fmt.Scanln(&name, &age)
if err != nil {
if err == io.EOF {
return
}
log.Printf("Ожидалось 2 значения, получено %d. Ошибка: %v", n, err)
// Очищаем буфер и пробуем снова
fmt.Scanln()
}Scanln в отличие от Scan не ждет продолжения ввода на новой строке - он сразу бросает ошибку, если данные закончились. Новички не проверяют n (количество прочитанных значений) и думают, что всё ок, а вторая переменная осталась с дефолтным значением.
Загрузка...