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

13

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

当我尝试更改路径以包含/src时:

GOPATH="/usr/local/google-cloud-sdk/platform/google_appengine/goroot/src"  

$ go get

:使用命令行工具"go get"下载并安装Go语言包或其它第三方库。
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脚本。

添加的额外路径没有解决我的错误。

我看到了这个回答: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个回答

7
它既不放在$GOROOT也不放在$GOPATH中。只需将其解压到您的$HOME目录并运行安装程序。如果需要,在您的.bash_profile中添加此行以将其添加到您的$PATH中。
export PATH=$HOME/google-cloud-sdk:$PATH

请确保使用gcloud components install app-engine-go下载golang SDK。https://cloud.google.com/appengine/docs/standard/go/download

不要更改路径以包含google-cloud-sdk/platform/google_appengine/goroot/src中的src目录。这会导致出现问题。您可以将$GOPATH设置为正常安装。使用Go App Engine SDK自动使用该目录中的源代码,无需任何操作。

此外,除非您计划从源代码编译新版本的Go(例如语言的新版本),否则不应手动更改$GOROOT。它会自动为您设置正确的$GOROOT。https://dave.cheney.net/2013/06/14/you-dont-need-to-set-goroot-really

如果您的安装已经混乱到无法理解的程度(我曾经遇到过这种情况),只需删除Cloud 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 $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


我尝试了你建议的方式,但并没有起作用。我将我的尝试添加到了原始帖子中。 - BryanWheelock
1
@BryanWheelock,您刚将SDK移动到了Go源代码文件夹中。它应该在您的主目录下一级,路径为~/google-cloud-sdk。除非您的所有源文件都在您提到的work/gocode目录中,否则请保持$GOPATH设置为$HOME/go,但我相信您想要$HOME/go。此外,您的项目必须放置在$GOPATH/src`目录中。 - RayfenWindspear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接