Skip to content

Полные формы импорта пакетов

Фактически, полная форма импортной декларации

где importname является необязательным, его значением по умолчанию является именем импортируемого пакета, а не именем папки, в некоторых проектах имя папки и пакета могут различаться, будь внимательнее!

В использованных выше декларациях импорта все части importname опущены, поскольку они идентичны соответствующим именам пакетов. Эти импортные декларации эквивалентны следующим:

Если часть importname представлена в декларации импорта, то префиксные токены, используемые в квалифицированных идентификаторах, должны быть importname вместо имени импортированного пакета.

Полная форма импортной декларации широко не используется. Тем не менее, иногда мы должны использовать его. Например, если исходный файл импортирует два пакета с одним и тем же именем, чтобы не запутать компилятор, мы должны использовать полную форму импорта, чтобы установить пользовательскую настройку importname хотя бы для одного пакета из двух.

Вот пример использования полных форм импортной декларации.

Пояснения:

  • Мы должны использовать format и random в качестве маркера префикса в квалифицированных идентификаторах вместо реальных имен пакетов fmt и rand.

  • Print — еще одна функция в fmt стандартном пакете. Как и вызовы функций Println, вызов функции Print может принимать произвольное количество аргументов. Эти функции называются вариативными. Она будет печатать строковые представления переданных аргументов один за другим. Если два последовательных аргумента не являются строковыми значениями, то в результате вывода между ними будет автоматически вставлен пробел.

В полной форме importname декларация об импорте может быть представлена точкой (.). Такой импорт называется точечным. Чтобы использовать экспортированные элементы в точечно импортируемых пакетах, часть префикса в квалифицированных идентификаторах должна быть опущена.

Пример:

В приведенном выше примере необходимо использовать Println вместо fmt.Println, и Now вместо time.Now.

Как правило, точечный импорт снижает читабельность кода, поэтому его не рекомендуется использовать в формальных проектах.

В importname полной форме импортная декларация может быть пустым идентификатором (_). Такой импорт называется анонимным импортом, некоторые статьи также называют его пустым импортом. Импорт исходных файлов не может использовать экспортированные элементы кода в анонимно импортированных пакетах. Целью анонимного импорта является инициализация импортированных пакетов, каждая из init функций в анонимно импортированных пакетах будет вызываться один раз.

В следующем примере все функции init, объявленные в стандартном net/http/pprof пакете, будут вызываться до main вызова функции входа.

Подробнее узнать о стандартном net__/__http__/__pprof__/ пакете ты можешь по ссылке.

Каждый не анонимный импорт должен использоваться хотя бы один раз

За исключением анонимного импорта, другие импорты должны использоваться хотя бы один раз. Например, следующий пример не компилируется.