Где GO искать google-cloud-sdk? Что должно делать GOPATH?
У меня возникли проблемы с настройкой Go App engine на osX. Должен ли путь google-cloud-sdk в GOROOT или GOPATH?
Я помещаю google-cloud-sdk в /usr/local
Похоже, что есть исходный код: goroot/
/usr/local/google-cloud-sdk/platform/google_appengine/goroot/
go env
GOPATH="/usr/local/google-cloud-sdk/platform/google_appengine/goroot"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
$go get
package google.golang.org/appengine: cannot download, /usr/local/google-cloud-sdk/platform/google_appengine/goroot is a GOROOT, not a GOPATH. For more details see: 'go help gopath'
package google.golang.org/appengine/datastore: cannot download, /usr/local/google-cloud-sdk/platform/google_appengine/goroot is a GOROOT, not a GOPATH. For more details see: 'go help gopath'
Когда я попытался изменить PATH, чтобы включить /src:
GOPATH="/usr/local/google-cloud-sdk/platform/google_appengine/goroot/src"
$go get
package google.golang.org/appengine: mkdir /usr/local/google-cloud-sdk/platform/google_appengine/goroot/src/src: permission denied
package google.golang.org/appengine/datastore: cannot find package "google.golang.org/appengine/datastore" in any of:
/usr/local/go/src/google.golang.org/appengine/datastore (from $GOROOT)
/usr/local/google-cloud-sdk/platform/google_appengine/goroot/src/src/google.golang.org/appengine/datastore (from $GOPATH)
Я добавил путь к google-cloud-sdk в GOROOT:
export GOROOT="/usr/local/go/:/usr/local/google-cloud-sdk/platform/google_appengine/goroot"
GO не похоже на несколько путей в GOROOT:
$ go get
go: cannot find GOROOT directory: /usr/local/go/:/usr/local/google-cloud-sdk/platform/google_appengine/goroot
Я запустил. /install.sh script после того, как скопировал источник в /usr/local
Дополнительный добавленный PATH не исправил ошибки, которые у меня были.
Я увидел этот ответ: Тест-коды для go и appengine
Но это от 5 лет назад и кажется неуклюжим/хаки. Кажется, через 5 лет будет более элегантное решение, которое копирует отдельные каталоги и создает символические ссылки.
ИЗМЕНИТЬ **********************
mv /usr/local/google-cloud-sdk/ ~/go/
, затем удалите GOPATH и GOROOT из .bash_profile
Затем я запустил. /install.sh
Я попытался запустить 'go get':
$go get
go install: no install location for directory /Users/Bryan/work/gocode/skincarereview outside GOPATH
Так как это не удалось, я добавил путь к рабочему каталогу кода И добавил путь к google-cloud-sdk в PATH:
export GOPATH = "/Users/Bryan/work/gocode/skincarereview"
export PATH=$HOME/google-cloud-sdk:$PATH
go get
получить сбой с тем же сообщением:
$ go get
go install: no install location for directory /Users/Bryan/work/gocode/skincarereview outside GOPATH
For more details see: 'go help gopath'
Ответы
Ответ 1
Он не входит ни в $GOROOT, ни в $GOPATH. Просто распакуйте его в свой каталог $HOME и запустите программу установки. Если необходимо, добавьте его в свой $PATH, добавив эту строку в свой .bash_profile
.
export PATH=$HOME/google-cloud-sdk:$PATH
Удостоверьтесь, что вы также закрепили golang SDK с помощью gcloud components install app-engine-go
https://cloud.google.com/appengine/docs/standard/go/download
НЕ меняйте свой путь, чтобы включить каталог src в google-cloud-sdk/platform/google_appengine/goroot/src
. Это нарушит все. Вы оставляете свой GOPATH своей обычной установкой. Использование SDK App Engine для Go автоматически использует источники в этом каталоге без каких-либо манипуляций.
Кроме того, НИКОГДА НИКОГДА НЕ ИЗМЕНЯЙТЕ $GOROOT, если вы не планируете компилировать новую версию Go из исходного кода (как в новой версии языка). Он автоматически установит для вас правильный $GOROOT. https://dave.cheney.net/2013/06/14/you-dont-need-to-set-goroot-really
Если ваша установка перепутана вне причины (со мной однажды), просто удалите облачный SDK и любые ссылки на него в вашем PATH. Также полностью удалите обычную установку Go. Затем начните с нуля. Установите Go, распакуйте google-cloud-sdk, запустите программу установки (добавьте в $PATH, если необходимо), gcloud components install app-engine-go
. Вуаля.
При разработке для App Engine ваши источники go попадают в ваш REGULAR $GOPATH. Они НЕ входят в google-cloud-sdk/...
в любом месте. Чтобы локально запустить dev_appserver, запустите dev_appserver.py [path-to-source]
, где указанный путь содержит ваш код и app.yaml. Я обычно cd
в моем пути к проекту (например, cd $HOME/go/src/myproject
) и запускаю с dev_appserver.py ./
. https://cloud.google.com/appengine/docs/standard/go/tools/using-local-server
Здесь раскрывается развертывание. https://cloud.google.com/appengine/docs/standard/go/tools/uploadinganapp
EDIT: структура папок.
$GOPATH = $HOME/go
![введите описание изображения здесь]()
Расположение папки google-cloud-sdk
![введите описание изображения здесь]()