Папка пакета, путь импорта пакета и зависимости пакета
Пакет кода может состоять из нескольких исходных файлов. Эти исходные файлы находятся в одной папке. Исходные файлы в папке (не включая вложенные папки) должны принадлежать одному и тому же пакету. Таким образом, папка соответствует пакету кода, и наоборот. Папка, содержащая исходные файлы пакета кода, называется папкой пакета.
Для 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.