Базовый ввод данных: fmt.Scanln() для идеального пользователя
Краткое описание
Знакомимся с простейшим способом получения данных от пользователя через fmt.Scanln(). Изучаем, как считывать целые числа, строки и вещественные значения. Важно: урок предполагает идеального пользователя, который всегда вводит корректные данные. Обработка ошибок — тема для следующих уроков.
Базовый синтаксис
var value int
fmt.Scanln(&value) // ⚠️ Обязателен амперсанд (&)
Ключевой момент: перед переменной ставится & (амперсанд).
Примеры для разных типов
Целые числа
var value int
fmt.Print("Введите число: ")
fmt.Scanln(&value)
fmt.Printf("Вы ввели: %d\n", value)
// Можно выполнять операции
result := value * 2
fmt.Printf("Умноженное на 2: %d\n", result)
Строки
var name string
fmt.Print("Введите имя: ")
fmt.Scanln(&name)
fmt.Printf("Привет, %s!\n", name)
Вещественные числа
var height float64
fmt.Print("Введите рост: ")
fmt.Scanln(&height)
fmt.Printf("Рост: %.2f, удвоенный: %.2f\n", height, height*2.0)
Логические значения
var flag bool
fmt.Print("Введите true или false: ")
fmt.Scanln(&flag)
fmt.Printf("Значение: %t\n", flag)
Полный пример
package main
import "fmt"
func main() {
// Целое число
var value int
fmt.Print("Введите value: ")
fmt.Scanln(&value)
fmt.Printf("value = %d, умноженное на 2 = %d\n", value, value*2)
// Строка
var name string
fmt.Print("Введите name: ")
fmt.Scanln(&name)
fmt.Printf("name = %s\n", name)
// Вещественное число
var height float64
fmt.Print("Введите height: ")
fmt.Scanln(&height)
fmt.Printf("height = %.2f, умноженное на 2 = %.2f\n", height, height*2.0)
}
Важные моменты
1. Амперсанд (&) обязателен
fmt.Scanln(&value) // ✅ Правильно
// fmt.Scanln(value) // ❌ Ошибка компиляции
2. Приглашение к вводу
Всегда показывайте пользователю, что от него ожидается:
fmt.Print("Введите число: ") // Приглашение
fmt.Scanln(&value) // Ввод
3. Enter/Return завершает ввод
Пользователь вводит данные и нажимает Enter для подтверждения.
4. Работает для базовых типов
int,int8,int16,int32,int64uint,uint8,uint16,uint32,uint64float32,float64stringbool
5. Предположение об идеальном пользователе
Этот урок предполагает, что:
- Если просим число — вводят число
- Если просим строку — вводят строку
- Никаких некорректных данных
6. Обработка ошибок — позже
Реальные приложения требуют проверки ввода. Это сложная тема для следующих уроков.
Типичные ошибки
Ошибка #1: Забыли амперсанд
var value int
fmt.Scanln(value) // ❌ Ошибка компиляции
Ошибка #2: Нет приглашения к вводу
// ❌ Плохо (непонятно, что вводить)
var value int
fmt.Scanln(&value)
// ✅ Хорошо (понятно)
var value int
fmt.Print("Введите число: ")
fmt.Scanln(&value)
Ошибка #3: Неправильный спецификатор вывода
var name string
fmt.Scanln(&name)
fmt.Printf("Имя: %d\n", name) // ❌ %d для строки
// ✅ Правильно
fmt.Printf("Имя: %s\n", name)
Best Practices
1. Всегда показывайте приглашение
fmt.Print("Введите возраст: ")
fmt.Scanln(&age)
2. Добавляйте пробел в конце приглашения
fmt.Print("Введите число: ") // ✅ Пробел после двоеточия
3. Используйте понятные имена переменных
var userName string // ✅ Понятно
var x string // ❌ Непонятно
4. Форматируйте вывод
fmt.Printf("Вы ввели: %d\n", value) // ✅ С новой строки
Что запомнить
fmt.Scanln(&переменная)— ввод данных- Амперсанд (&) обязателен
- Enter/Return завершает ввод
- Работает с
int,string,float64,boolи др. - Всегда показывайте приглашение к вводу
- Этот метод для идеального пользователя
- Обработка ошибок — отдельная сложная тема
- После ввода переменная используется как обычная