我在osX上设置Go App引擎时遇到问题。 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更改为include / 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
在将源复制到/ usr / local
后,我确实运行了./install.sh脚本添加的其他PATH并没有解决我遇到的错误。
我看到了这个答案:Test cases for go and appengine
但它是从5年前开始的,看起来很笨拙/笨拙。在5年内,似乎会有一个更优雅的解决方案,即复制单个目录并创建符号链接。
编辑**********************
mv /usr/local/google-cloud-sdk/ ~/go/
然后从.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'
答案 0 :(得分:7)
既不是$ GOROOT也不是$ GOPATH。只需将其解压缩到$ HOME目录并运行安装程序即可。如有必要,可将此行添加到.bash_profile
。
export PATH=$HOME/google-cloud-sdk:$PATH
请务必使用gcloud components install app-engine-go
https://cloud.google.com/appengine/docs/standard/go/download
请勿更改路径以在google-cloud-sdk/platform/google_appengine/goroot/src
中包含src目录。这将打破局面。您将$ GOPATH保留为正常安装。使用App Engine SDK for Go会自动使用该目录中的源代码而无需任何操作。
此外,除非您计划从源代码编译新的Go版本(如在该语言的新版本中),否则不应手动更改$ GOROOT。它会自动为你设置合适的$ 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
编辑:文件夹结构。
$ GOPATH = $ HOME / go
google-cloud-sdk文件夹的位置