Я пишу служебную функцию для своих модульных тестов, которая используется модульными тестами в нескольких пакетах. Эта служебная функция должна читать определенный файл (всегда один и тот же файл). Вот три решения, которые не работают, чтобы объяснить, что я ищу и почему.
-
Hardcode - абсолютный путь. Это не удается, потому что другой пользователь, который пытается протестировать проект, может иметь другой префикс на абсолютном пути.
-
Hardcode относительный путь от пути файла, который определяет функцию утилиты. Это терпит неудачу, потому что пакеты, которые импортируют и используют эту функцию, не обязательно находятся на одном уровне иерархии файлов, как файл, который определяет функцию утилиты, а относительные пути интерпретируются относительно импортера, а не импортированы.
-
Передайте относительный путь к файлу от каждого вызывающего абонента относительно пакета вызывающего абонента. Это действительно работает, но кажется очень многословным, потому что теперь каждый вызывающий объект должен быть изменен для передачи одного файла.
Я вижу четвертое решение, в котором я могу жестко указать путь в функции утилиты, который относится к корневому каталогу пакета верхнего уровня. Тем не менее, я не смог найти способ получить корневой каталог в коде, хотя я подозреваю, что есть один, потому что импорт может быть разрешен из корня.
Таким образом, как я могу получить искомый корневой каталог?
Я просмотрел различные документы Go, но пока не нашел решения. Я также видел этот вопрос, но решение там эквивалентно # 3 выше.