Указатели и продвинутый ввод данных

Понимание областей видимости переменных, работа с указателями и освоение безопасных методов ввода данных.

Что изучим

  • Области видимости: локальная, вложенная и глобальная
  • Указатели и адреса в памяти
  • Передача по значению vs передача по указателю
  • Методы ввода данных: Scan, Scanln, Scanf
  • Работа с bufio для безопасного ввода строк
  • Обработка ошибок при вводе данных

Основные концепции

Область видимости: фигурные скобки определяют границы существования переменной. Внутренняя переменная с тем же именем перекрывает внешнюю. Глобальные переменные доступны во всех функциях пакета, локальные — только внутри функции объявления.

Указатели: хранят адрес в памяти другой переменной. Оператор & получает адрес, оператор * разыменовывает указатель для доступа к значению. Указатели позволяют функциям изменять переменные из внешних областей видимости.

Передача по значению: Go по умолчанию копирует значения при передаче в функцию. Изменения внутри функции не влияют на оригинал. Для изменения оригинала нужно передавать указатель.

Методы ввода данных: Scan читает до пробела или переноса, Scanln останавливается на новой строке, Scanf считывает по строгому шаблону. Все три метода не подходят для строк с пробелами — требуется bufio.Scanner.

bufio.Scanner: безопасный способ чтения многословных строк с автоматической обработкой переносов. Рекомендуется для production кода вместо простых методов fmt.

Обработка ошибок: функции ввода возвращают количество прочитанных значений и ошибку. Проверка err != nil обязательна для корректной работы с невалидным вводом и очистки буфера.