Как go импортирует пакеты, если имя каталога не совпадает с именем пакета

У меня есть пакет translater (он же каталог), в котором есть два утильных субпакета, которые импортируются по имени translater/пакет и главный main файл translater.go (он же package main - да, я его не переименовал в main.go, но это не важно).

Затем мне захотелось поэкспериментировать и сделать вторую версию пакета. Я скопировал все содержимое в каталога translater2. Сделал новую версию translater.go, скомпилировал. Все работает. Затем захотел создать третью версию пакета. Скопировал все в каталог translater3. Опять все компилируется. Затем решил сделать так: translater3\v3. Опять все компилируется.

Вопрос: а как go находит субпакеты, если имя стартового каталога не совпадает с именем в импортах? Везде же написано, что импорт в go основан на структуре каталогов? Я сначала подумал, что go импортирует субпакеты из старого расположения translater\*. Я переименовал его в translater0. Все по-прежнему работает.

Вот импорт моих субпакетов, которые в translater.go остаются неизменными.

"translater/mysqlconnect"
"translater/utils"
"translater/yapi"

Ну и сопутствующий вопрос: а как вообще правильно делать версионирование своих пакетов?


Ответы (1 шт):

Автор решения: prospero78su

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

→ Ссылка