Как зафиксировать абсолютный путь до файлов настроек?
Привет!
В подавляющем большинстве приложению нужны конфиги, которые обычно хранятся в текстовых файлах. И если вы делаете нормальное приложение, то вам нужно обращаться к ним в не зависимости где лежит ваш бинарник.
Ход моих мыслей:
Скачали сорсцы куда угодно, куда удобно.
Скомпилировали сорцы куда угодно, хоть в $HOME, хоть на рабочий стол.
Конфиги и прочие вспомогательные файлы остались лежать в сорцах, что вполне логично.
Прописываем путь до бинарника в $PATH.
Теперь если у нас в приложении указан относительный путь `ReadFile("./config.conf")`, то где бы я не вызвал '$> myapp', прилож будет считать, что `config.conf` лежит в той директории в которой я делаю вызов. Т.е. смысл $PATH теряется.
А указать абсолютные пути я не могу, т.к. я не хочу привязывать сорцы к $GOPATH. И кодогенегация тут бессильна. И каждый раз задавать путь до сорцов через флаги я не хочу. И просить людей создавать какую-нибудь системную переменную с путем до сорцов не хорошо.
Выходит, что нужно делать make инсталятор и собирать конфиги где-нибудь в $HOME.
Вроде нужная возможность. Чего бы ему не знать, откуда бинарник был скомпилирован.
Ivan Sokolov: Да, так и есть. Но в Go из коробки, я могу сделать только `go build -o $HOME/myapp`. Я уже подошел к осознанию, что только `go build` мне недостаточно.
А зачем вообще гошный проект компилировать на машине клиента? Почему программу не распространять в виде бинарника и рядом конфиг? И пусть кладут куда хотят потом.
Далее, если юзер будет править конфиг, то он вполне может его положить в нужное место. Например, рядом с бинарником или в ~/.myapp/, или в /usr/local/etc/myapp/. Можно и там и сям, с приоритетом конфига в директории бинаря. А ключ, всё-таки, сделать для того, если юзер хочет конкретно в другом месте разместить конфиг.
Если редактирование конфига опционально – зашить умолчательные настройки в саму программу.
А на этапе копиляции прописывать путь до кофига — это как-то странно. Если захочется переместить конфиг – программу перекомпилировать?