GO在哪里寻找google-cloud-sdk? GOPATH应该是什么?

时间:2017-04-24 15:12:13

标签: google-app-engine go

我在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

中删除了GOPATH和GOROOT

然后我跑了./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 个答案:

答案 0 :(得分:7)

既不是$ GOROOT也不是$ GOPATH。只需将其解压缩到$ HOME目录并运行安装程序即可。如有必要,可将此行添加到.bash_profile

,将其添加到$ PATH
export PATH=$HOME/google-cloud-sdk:$PATH

请务必使用gcloud components install app-engine-go https://cloud.google.com/appengine/docs/standard/go/download

抓取golang SDK

请勿更改路径以在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

enter image description here

google-cloud-sdk文件夹的位置

enter image description here