Как получить доступ к файлам ресурсов после того, как инструмент go установил исполняемый файл? - PullRequest
6 голосов
/ 25 февраля 2012

Предположим, что запуск go install -v importpath создает исполняемый файл и устанавливает его в $GOPATH/bin/program. Инструмент go не может установить файлы ресурсов. Когда я запускаю program, я хотел бы получить доступ к некоторым файлам ресурсов, которые находятся под $GOPATH/src/importpath.

Каков наилучший способ доступа к таким файлам ресурсов из установленного исполняемого файла?

Ответы [ 3 ]

7 голосов
/ 26 февраля 2012

Этот вопрос был задан несколько раз в списке рассылки офигенных. Инструмент go не предлагает прямой способ распределения дополнительных ресурсов в данный момент. Однако есть два обходных пути:

  • написать простой скрипт (достаточно awk), чтобы преобразовать любой файл в .go файл, который содержит только одну строковую константу, и встроить файл непосредственно в двоичный файл. Этот подход используется, например, в проекте Camlistore ( camlistored / ui / fileembed.go ). go-bindata делает подобные вещи.

  • go-tour и многие другие проекты в настоящее время используют функцию Импорт пакета go/build для поиска во всех папках src/, перечисленных в $GOPATH и $GOROOT, для поиска правильный путь к источникам пакета. Пример: http://code.google.com/p/go-tour/source/browse/gotour/local.go?r=996704f8ef9e63949b3bc4d94b613ec4a7b5d99a#53

1 голос
/ 25 февраля 2012

go install не предназначен для того, чтобы делать то, что вы хотите.

Если вы настаиваете на использовании go install, вы можете встроить ресурсы в исполняемый файл (байтовые массивы в исходном коде).

Другой вариант - использовать сценарий развертывания, который запускает go install и затем копирует ресурсы в место, известное вашему исполняемому файлу.

Если вы хотите, чтобы вашу программу могли устанавливать другие люди, кроме вас, вам следует использоватьсистема упаковки, стандартная для ОС, на которую вы ориентируетесь (например, apt / rpm в Linux, исполняемый файл установщика в Windows, файл .dmg на Mac и т. д.)

0 голосов
/ 25 февраля 2012

Переменная среды GOPATH

В Unix значением является строка, разделенная двоеточиями.В Windows значение представляет собой строку, разделенную точкой с запятой.В плане 9 значением является список.

Следовательно, $GOPATH/bin/program и $GOPATH/src/importpath не обязательно действительны.Например, в Linux

$ GOPATH=$HOME/gopath:$HOME/go
$ cd $GOPATH/bin/go
bash: cd: /home/peter/gopath:/home/peter/go/bin/go: No such file or directory
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...