2013-02-20 1 views
1

Я создал API в Go, в котором я установил два пакета через «go get» и создал четыре других для моего собственного использования. Кажется, все работает нормально. Однако я хотел бы переместить туда, где пакеты, чтобы я мог иметь все в моей директории Git.Установка пакетов Go в каталогах, отличных от по умолчанию

Из того, что я читал, должно быть так же легко, как изменить мою переменную GOPATH на новый каталог и снова запустить тест «go get». Это верно? Если это так, я делаю что-то неправильно? Ниже показано, что отображается в терминале (Mac OS X), когда я запускаю «go env». Если какая-либо другая информация будет полезна, сообщите мне. Благодарю.

GOARCH="amd64" 
GOBIN="" 
GOCHAR="6" 
GOEXE="" 
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common" 
GOHOSTARCH="amd64" 
GOHOSTOS="darwin" 
GOOS="darwin" 
GOPATH="/Applications/MAMP/htdocs/git/cbi/api" 
GOROOT="/usr/local/go" 
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" 
CGO_ENABLED="1" 

Должен пояснить, что по умолчанию мой GOPATH был пустой строкой. Я попробовал обновить его до указанной выше директории, так как именно там я хочу, чтобы были установлены новые пакеты, а также для поиска GO для любых пакетов, которые я создал там.

Я устанавливаю свою переменную GOPATH командой: экспорт GOPATH = "/ Applications/MAMP/HTDOCS/мерзавец/CBI/апи"

После этого, я могу видеть, переменная была установлена, когда я введите «go env». Однако, если я выйду из терминала, а затем откройте его и снова запустите «go env», переменная GOPATH не будет установлена. Есть ли причина, по которой это не спасает? Должен ли я устанавливать его другим способом вместо экспорта?

+0

Что происходит, когда вы пытаетесь построить/запустить из нового местоположения? –

+0

Вы еще не предоставили достаточную информацию. У вас была проблема, когда вы использовали другой гопат, который вам нужен для отладки справки? –

+0

@RichChurcher Я могу создать и запустить файл go, содержащий мою главную функцию, если пакеты находятся в моем каталоге GOROOT. Однако, если я удалю их оттуда и попытаюсь поместить их под свой каталог api, они не будут найдены. И когда я пытаюсь выполнить «go install» с pkg, я получаю: go install: no install location для _PACKAGE_PATH – user387049

ответ

3

Если вы не установите переменную GOPATH, пакеты будут установлены в GOROOT, что не рекомендуется. Если вы хотите установить GOPATH в «/ Applications/MAMP/htdocs/git/cbi/api», убедитесь, что каталог вашего кода помещен в «/ Applications/MAMP/htdocs/git/cbi/api/src /».

 
However if I quit Terminal and then open it back up, and run "go env" again, the GOPATH variable is not set. 

Как и в случае с jeremy, вы должны установить переменную окружения в файле конфигурации bash. В mac os добавьте это в свой файл $ HOME/.profile: export GOPATH=/Applications/MAMP/htdocs/git/cbi/api. Кстати, вы можете указать несколько GOPATH, для exmple, export GOPATH=/path/to/gopath1:/path/to/gopath2

+0

Поразмыслив над этим, я считаю, что это был правильный ответ. Я думаю, что добавление папки на предложение Джо было просто совпадением. – user387049

1

Пожалуйста, убедитесь, что GOPATH есть три подпапки: ЦСИ, упак/linux_amd64 (это один имеет дело с ОС), бен

Более подробную информацию можно отнести: GOPATH и Build

+0

У меня не было папки linux_amd64 под pkg. Однако я добавил darwin_amd64, так как я нахожусь на MAC OS X. Не похоже, чтобы исправить эту проблему. – user387049

+0

Да, ваш pkg прав. Он все еще сообщает: go install: нет места установки для _PACKAGE_PATH? – Joe

+2

вам не нужно самостоятельно устанавливать каталог darwin_amd64. инструмент go добавит это автоматически, когда вы установите что-нибудь. Вам нужно добавить только файлы верхнего уровня src/pkg/bin /. –

2

Мой подход был начать новый проект Go, поставив следующий в env.sh в моем проекте реж

export GOPATH=$PWD 
export PATH=$GOPATH/bin:$PATH 

Тогда я всегда ' источник»этот файл, прежде чем начать работу в новом окне терминала, т.е.

. env.sh 

Тогда, когда я использую„иди“, он помещает все загруженный исходный код в текущей папке проекта, и я могу совершить это на мой выбранная система управления версиями. В этом преимущество этого подхода: все хранится в одном дереве каталогов, который можно легко версировать.

Если я должен забыть исходный файл env.sh, команды Go обычно прерываются немедленно, потому что у меня нет доступа на запись в/usr/local/go файлы, которые по умолчанию помещаются для них. Поэтому вскоре я обнаружил, что не забыл.

Смежные вопросы