Ваша основная проблема в том, что у вас есть два разных пакета, которые слишком тесно связаны.Если у вас есть пакет, который зависит от его работы с ресурсом, содержащимся в другом пакете, то на самом деле либо:
- Они не должны быть двумя разными пакетами;или
- Вам необходимо их дополнительно развязать.
Таким образом, у вас есть несколько вариантов здесь:
Просто нетотдельный пакет "помощников".Если функциональные возможности в этом пакете не имеют иной цели, кроме как помочь с основным пакетом, то объедините их, поскольку концептуально они недостаточно независимы, чтобы быть отдельными пакетами.Как вы видите, использование папок просто в качестве средства для организации кода - не такая хорошая идея в Go, как в некоторых других языках.
Полное определение имени файлас абсолютным путем как в вашем основном, так и в вашем пакете помощников.Если действительно верно, что два независимых пакета зависят от одного и того же файла, то оба должны иметь возможность найти его независимо от того, где находится какой-либо пакет, и для этого требуется абсолютный путь.Это, вероятно, ваше наименее оптимальное решение.
Далее отсоедините пакет помощников, чтобы он больше не зависел от этого файла, возможно с помощью:
- .полное имя файла в вашем основном пакете и передача его функциям в вашем пакете помощников при вызове;
- открытие файла в основном пакете и передача
io.Reader
файлу функциямв вашем пакете помощников, когда вы вызываете их; - открывая файл в вашем основном пакете и передавая содержимое файла функциям в вашем пакете помощников, когда вы вызываете их, возможно, в виде буфера
bytes
;или - извлеките нужную информацию из файла в вашем основном пакете и передайте только эту соответствующую информацию функциям в вашем пакете помощников при вызове.
Обратите внимание, что с этим подходом вы все равно столкнетесь с проблемами.Когда вы запускаете свое основное приложение, ваш текущий рабочий каталог по умолчанию будет тем каталогом, в котором вы находитесь в данный момент, когда вы запускаете программу.Поэтому, если вы не укажете полностью имя файла, то, как только вы запустите свое приложение из любого каталога, кроме того, в котором находится ваш исходный код, он не сможет найти нужный файл.