在非默认目录中安装Go包

时间:2013-02-20 19:25:21

标签: go

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

从我读过的内容来看,它应该像将GOPATH变量更改为新目录一样简单,然后再次运行go get进行测试。它是否正确?如果是的话,我做错了吗?以下是我运行go env时在终端(Mac OS X)中显示的内容。如果有任何其他信息有用,请告诉我。感谢。

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"

我应该澄清一下,默认情况下我的GOPATH是一个空字符串。我尝试将它更新到上面的目录,因为这是我希望安装新软件包的地方,也是Go寻找我在那里创建的任何软件包。

我通过运行

来设置GOPATH变量
export GOPATH="/Applications/MAMP/htdocs/git/cbi/api"

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

3 个答案:

答案 0 :(得分:3)

如果未设置GOPATH变量,则将在GOROOT中安装软件包,不建议这样做。如果要将GOPATH设置为“/ Applications / MAMP / htdocs / git / cbi / api”,请确保将代码目录放在“/ Applications / MAMP / htdocs / git / cbi / api / src /”中。

However if I quit Terminal and then open it back up, and run "go env" again, the GOPATH variable is not set.

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

答案 1 :(得分:2)

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

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

然后,在我开始在新的终端窗口工作之前,我总是'找到'这个文件,即

. env.sh

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

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

答案 2 :(得分:1)

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

更多详情可参考:GOPATHBuild