2013-02-20 35 views
1

我在Go中创建了一个API,其中我已经通过“go get”安装了两个包,并创建了四个供我自己使用的包。一切似乎都很好。不过,我想移动包的位置,以便我可以拥有我的Git目录中的所有内容。在非默认目录中安装Go包

从我读过的内容来看,它应该像将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是一个空字符串。我试着将它更新到上面的目录中,因为那是我希望安装新软件包的地方,也是为了查找我创建的放置在那里的任何软件包。

我设置我的GOPATH变量通过运行: 出口GOPATH = “/应用程序/ MAMP/htdocs中/的git/CBI/API”

这样做后,我可以看到变量已经被设置时,我键入“go env”。但是,如果我退出终端然后再打开它,并再次运行“go env”,则GOPATH变量未设置。它有没有保存的原因?我应该设置另一种方式,而不是出口?

+0

当您尝试从新位置创建/运行时会发生什么? – 2013-02-20 21:24:23

+0

你还没有提供足够的信息。当您使用不同的gopath时,您是否遇到问题需要帮助调试? – 2013-02-20 21:40:35

+0

@RichChurcher只要包在我的GOROOT目录中,我就可以构建并运行包含我的主函数的go文件。但是,如果我从那里删除它们并尝试将它们放在我的api目录下,则不会找到它们。当我尝试使用pkg执行“go install”时,我得到:go install:没有安装位置用于_PACKAGE_PATH – user387049 2013-02-20 22:58:35

回答

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。 BTW,你可以指定多个GOPATH,为exmple,export GOPATH=/path/to/gopath1:/path/to/gopath2

+0

经过深入研究,我相信这是正确的答案。我想我按照Joe的建议添加文件夹只是巧合。 – user387049 2013-02-26 20:27:09

1

请确保GOPATH有三个子文件夹:SRC,包装/ linux_amd64(这其中有做的OS),滨

更多细节可以参考:GOPATHBuild

+0

我没有pkg下的linux_amd64文件夹。不过,我在MAC OS X上添加了darwin_amd64。似乎没有解决这个问题。 – user387049 2013-02-21 00:26:48

+0

是的,你的pkg是正确的。它是否仍然报告:去安装:没有_PACKAGE_PATH的安装位置? – Joe 2013-02-21 00:38:08

+2

您不必亲自设置darwin_amd64目录。去安装东西时,go工具会自动添加。您只需添加顶层src/pkg/bin /目录。 – 2013-02-21 01:09:04

2

我的做法是通过将以下内容env.sh在我的项目目录

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

然后我总是开始一个新的围棋项目“源”此文件之前,我开始在一个新的终端窗口的工作,即

. env.sh 

后来,当我使用‘去拿’,它把所有下载的源代码到当前项目文件夹,我可以交给我选择版本控制系统。这是这种方法的优点:一切都保存在一个可以很容易地进行版本控制的目录树中。

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

相关问题