Относительные пути в golang

Есть такое дерево:

|-cmd 
|   |-task
|       |-main.go
|
|-configs
|    |-config.yaml
|
|-pkg
    |-runner
         |-runner.go
         |-runner_test.go

В runner.go к config.yaml обращаюсь так: ../../configs/. И тесты runner_test.go проходят. Однако после билда создается бинарник в корне проекта, который после запуска выдает ошибку обращения к конфигу, потому что уходит на две директории назад от корня проекта. И если изменить обращение к конфигу в runner.go на ./configs/, тогда после билда всё успешно запустится, однако при тестировании возникнет ошибка обращения к конфигу. Как правильно обращаться к конфигу?


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

Автор решения: prospero78su
  1. Напишите вывод терминала. Не надо заставлять отвечающих догадываться что именно выводит компилятор.
  2. Если вы используете pkg, тогда необходимо использовать и internal (чисто логически).
  3. Как вы запускаете ваши тесты?
→ Ссылка
Автор решения: Senior Pomidor

ответ зависит от того, что вы используйте для чтения конфига.

одни из попульярных инструментов - это а . На нем вы можете указать несколько путей к конфигу: как для тестов, так и для main app.

v := viper.New()
v.SetConfigName("config")
v.SetConfigType("yaml")
v.AddConfigPath(".")
v.AddConfigPath("./configs")

тогда у вас конфиг будет искаться как в текущей директории, так и в ./configs

p.s. лучше иметь возможность передать пусть к конфигу.

→ Ссылка