Skip to content

Папка пакета, путь импорта пакета и зависимости пакета

Пакет кода может состоять из нескольких исходных файлов. Эти исходные файлы находятся в одной папке. Исходные файлы в папке (не включая вложенные папки) должны принадлежать одному и тому же пакету. Таким образом, папка соответствует пакету кода, и наоборот. Папка, содержащая исходные файлы пакета кода, называется папкой пакета.

Для Go Toolchain пакет, путь импорта которого содержит internal имя папки, рассматривается как специальный пакет. Он может быть импортирован только пакетами в и под прямым родительским каталогом internal папки. Например, package .../a/b/c/internal/d/e/f и .../a/b/c/internal могут быть импортированы только пакетами, пути импорта которых имеют .../a/b/c префикс.

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

Go не поддерживает циклические зависимости пакетов. Если пакет a зависит от пакета b, а пакет b зависит от пакета c, то исходные файлы в пакете c не могут импортировать пакет a и b, а исходные файлы в пакете b не могут импортировать пакет a.

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

Позже мы будем называть пакеты с именами main и содержащие main входные функции программными пакетами (или командными пакетами), а остальные пакеты называть библиотечными пакетами . Пакеты программ не импортируются. Каждая программа Go должна содержать один и только один программный пакет!

Имя папки пакета не обязательно должно совпадать с именем пакета. Однако для пакета библиотеки пользователи пакета будут сбиты с толку, если имя пакета отличается от имени папки пакета. Причина путаницы в том, что путь импорта пакета по умолчанию — это имя пакета, но то, что содержится в пути импорта пакета, — это имя папки пакета. Поэтому, пожалуйста, попробуй сделать два имени одинаковыми для каждого пакета библиотеки.

С другой стороны, рекомендуется давать каждой папке пакета программы осмысленное имя, отличное от имени пакета, main.