1

我在 Go 中创建了一个 API,我在其中安装了两个包,go get并创建了另外四个供我自己使用。一切似乎都很好。但是,我想移动包所在的位置,以便可以在我的 Git 目录中拥有所有内容。

根据我的阅读,它应该像将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"

我应该澄清一下,默认情况下 myGOPATH是一个空字符串。我尝试将它更新到上面的目录,因为我希望在那里安装新的包,并且还让 Go 查找我创建并放置在那里的任何包。

GOPATH通过运行设置我的变量:

export GOPATH="/Applications/MAMP/htdocs/git/cbi/api"

完成此操作后,我可以看到当我键入时变量已设置go env。但是,如果我退出终端然后重新打开它并go env再次运行,GOPATH则不会设置变量。不保存有什么原因吗?我应该以另一种方式设置它而不是导出吗?

4

3 回答 3

3

如果不设置 GOPATH 变量,包将安装在 GOROOT 中,不推荐。如果要将 GOPATH 设置为“/Applications/MAMP/htdocs/git/cbi/api”,请确保将代码目录放在“/Applications/MAMP/htdocs/git/cbi/api/src/”中。

但是,如果我退出终端然后重新打开它,然后再次运行“go env”,则不会设置 GOPATH 变量。

就像 jeremy 说的,你应该在 bash 配置文件中设置环境变量。在 mac os 中,将其添加到您的 $HOME/.profile : export GOPATH=/Applications/MAMP/htdocs/git/cbi/api。顺便说一句,您可以指定多个 GOPATH,例如,export GOPATH=/path/to/gopath1:/path/to/gopath2

于 2013-02-21T13:21:03.290 回答
2

我的方法是通过将以下内容放入项目目录中的 env.sh 来启动一个新的 Go 项目

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

然后我总是在新的终端窗口中开始工作之前“获取”这个文件,即

. env.sh

然后当我使用“go get”时,它会将所有下载的源代码放入当前项目文件夹中,我可以将其提交到我选择的版本控制系统。这是这种方法的优点:所有内容都保存在一个目录树中,可以轻松进行版本控制。

如果我碰巧忘记了 source env.sh,Go 命令通常会立即失败,因为我没有 /usr/local/go 文件的写入权限,这是放置它们的默认位置。所以我很快发现我没有忘记。

于 2013-02-21T14:41:28.393 回答
1

请确保 GOPATH 有三个子文件夹:src,pkg/linux_amd64(这个和操作系统有关),bin

更多细节可以参考:GOPATHBuild

于 2013-02-21T00:07:00.737 回答