Относительные пути в 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 шт):
- Напишите вывод терминала. Не надо заставлять отвечающих догадываться что именно выводит компилятор.
- Если вы используете
pkg, тогда необходимо использовать иinternal(чисто логически). - Как вы запускаете ваши тесты?
ответ зависит от того, что вы используйте для чтения конфига.
одни из попульярных инструментов - это а . На нем вы можете указать несколько путей к конфигу: как для тестов, так и для main app.
v := viper.New()
v.SetConfigName("config")
v.SetConfigType("yaml")
v.AddConfigPath(".")
v.AddConfigPath("./configs")
тогда у вас конфиг будет искаться как в текущей директории, так и в ./configs
p.s. лучше иметь возможность передать пусть к конфигу.