Пишу некое приложение, где используется конфиг json.
В приложении много папок (модулей). Каждый модуль должен имен доступ к этому конфиг-файлу.
Как я понимаю, после компиляции, все пути сломаются, если работать, например, через _, filename, _, _ := runtime.Caller(1)
Как быть, куда вообще кладутся конфиги, чтобы и тестировать было хорошо и запустилось без проблем?
majetree, ну это дело вкусовщины, все продукты jetbrains юзают .appname, virtual Box тоже, heroku и тд... А вот в .config у меня, например, лежит какое-то ноунейм приложение
А вот в .config у меня, например, лежит какое-то ноунейм приложение
ну не сказал бы, юзающих $HOME/.config тоже довольно много и тоже популярных продуктов, например: systemd, chromium(и другие браузеры кроме фокса), mpv, libreoffice, blender, Electron, Atom, sublime, VirtualBox(у меня конфиги тут), mc и много других.
Да оно как бы и логично, всё в одном месте(подобно /etc), а то превратили домашнюю папку пользователя в мусорник. Я, например, всегда лажу по файловой системы с включенным отображением скрытых файлов и бардак(много скрытых файлов и папок) творящийся в $HOME малость напрягает, а так в специализированной папке .config они все в одном месте.
очень, только у меня доступ из модуля, который находится на втором уровне - там где-то внутри прописано, что-то вроде '../config.json'. После компиляции - этот путь поламается, я правильно понимаю?
Артем Кисленко,
а... это....
это сто лет как решается argv[0]
ну или в терминах Go - os.Args[0]
В нем содержится путь к бинарному файлу в момент запуска программы.
Отсекаем имя файла, добавляем конфигурационный файл - и получаем то, что нужно.
хотя, ради универсальности при конфигурировании, я бы использовал просто текущий каталог
То есть достаточно написать просто "config.json" и он его автоматически подхватит.