Пустой идентификатор `_`
Часть раздела Логика и управление потоком путешествия по GO на Coddy — урок 55 из 68.
Иногда вам нужно импортировать пакет не для того, чтобы использовать его экспортируемые функции или переменные, а для того, чтобы вызвать его побочные эффекты. Самым распространенным побочным эффектом является запуск функции init пакета, которая выполняется автоматически при импорте пакета.
Go предоставляет пустой идентификатор _ для этой цели. Когда вы импортируете пакет с использованием пустого идентификатора, Go импортирует пакет и выполняет любой код инициализации, но не требует от вас использования каких-либо его экспортируемых идентификаторов.
import _ "database/sql/driver"Это особенно полезно, когда вам нужно, чтобы пакет зарегистрировал себя в другой системе или выполнил задачи по настройке, но вы не вызываете напрямую ни одну из его функций в своем коде. Без пустого идентификатора Go выдаст ошибку компиляции за импорт неиспользуемого пакета.
Пустой идентификатор сообщает Go: «Импортируй этот пакет ради его побочных эффектов, но я не буду ссылаться на него напрямую в своем коде». Это позволяет сохранять чистоту импортов, при этом получая необходимое поведение инициализации.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Шпаргалка
Используйте пустой идентификатор _ для импорта пакетов ради их побочных эффектов без использования их экспортируемых функций:
import _ "database/sql/driver"Это импортирует пакет и запускает его код инициализации, не требуя от вас использования каких-либо его экспортируемых идентификаторов. Полезно, когда пакетам необходимо зарегистрироваться в других системах или выполнить задачи по настройке.
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком выполнения
Switch с использованием `fallthrough`Выход из вложенных цикловПродолжение конкретного циклаОператор `goto`Итоги: Продвинутое управление циклами4Проект: Простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели по значениюПолучатели по указателюВыбор типа получателяМетоды против функцийИтоги: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение6Идиоматичный Go: Множества
Идиома множества в GoСоздание множестваДобавление в множествоПроверка наличия элементаУдаление из множестваИтерация по множествуИтоги — Уникальные имена пользователей9Пакеты и область видимости
Что такое пакет?Экспортируемые и неэкспортируемые элементыСоздание простого пакетаПсевдонимы пакетовПустой идентификатор `_`Функция `init`Итоги: создание утилиты