Как 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 шт):
Надо понимать, что имя каталога и имя пакета не одно и тоже. Попробуйте в одном пакете разместить несколько файлов с разной пакетной принадлежностью. Компилятор выдаст ошибку. Т.е. попросту говоря -- вы указываете путь импорта, а не имя пакета для импорта.