Указатели и продвинутый ввод данных
Понимание областей видимости переменных, работа с указателями и освоение безопасных методов ввода данных.
Что изучим
- Области видимости: локальная, вложенная и глобальная
- Указатели и адреса в памяти
- Передача по значению vs передача по указателю
- Методы ввода данных: Scan, Scanln, Scanf
- Работа с bufio для безопасного ввода строк
- Обработка ошибок при вводе данных
Основные концепции
Область видимости: фигурные скобки определяют границы существования переменной. Внутренняя переменная с тем же именем перекрывает внешнюю. Глобальные переменные доступны во всех функциях пакета, локальные — только внутри функции объявления.
Указатели: хранят адрес в памяти другой переменной. Оператор & получает адрес, оператор * разыменовывает указатель для доступа к значению. Указатели позволяют функциям изменять переменные из внешних областей видимости.
Передача по значению: Go по умолчанию копирует значения при передаче в функцию. Изменения внутри функции не влияют на оригинал. Для изменения оригинала нужно передавать указатель.
Методы ввода данных: Scan читает до пробела или переноса, Scanln останавливается на новой строке, Scanf считывает по строгому шаблону. Все три метода не подходят для строк с пробелами — требуется bufio.Scanner.
bufio.Scanner: безопасный способ чтения многословных строк с автоматической обработкой переносов. Рекомендуется для production кода вместо простых методов fmt.
Обработка ошибок: функции ввода возвращают количество прочитанных значений и ошибку. Проверка err != nil обязательна для корректной работы с невалидным вводом и очистки буфера.