2016-07-26 91 views
3

我是Golang的新手。据我所知,当你想创建一个新的Go项目时,我们只需要创建一个目录。然后我们将环境变量GOPATH指向此目录。在这个目录中,我们创建了三个子目录pkg,srcbin。然后当我们执行go get ...时,第三方包将安装在pkg子目录中。后来如果我想创建另一个Go项目,则创建一个名为project2的新目录并将GOPATH指向project2。此时go get ...将下载项目2的pkg子目录中的第三方包。我的问题是,Go是否有中央存储库?如果没有,如果在两个不同的项目中使用相同的软件包,则会下载两次。真的吗?golang是否有下载的第三方软件包的中央存储库?

+0

通过“中央资源库”,你的意思是一个本地缓存?这是您的GOPATH,您可以为多个项目使用相同的GOPATH。 – JimB

+0

如果我在project1上工作,我将GOPATH指向project1。后来我在project2上工作,我应该把GOPATH指向project2吗?如果是这样,GOPATH不是本地缓存...... – user130268

+3

GOPATH不是您的项目的根源。您的项目应位于'$ GOPATH/src'下的导入路径中。请参阅[如何编写Go代码](https://golang.org/doc/code.html) – JimB

回答

1

以后如果我想创建另一个围棋项目,我创建了一个名为项目2和点GOPATH新的目录,以PROJECT2 ... 我的问题是,围棋是否有一个中央存储库?如果没有,如果在两个不同的项目中使用相同的软件包,则会下载两次。真的吗?

不,没有Go代码的中央存储库。但是,软件包总是会被下载两次也是不正确的。

这里的误解是,GOPATH指向一个单独的项目:它没有。相反,GOPATH指向一个环境您的所有软件包都在哪里生存;它是go get将下载包的地方,并且go build将在构建时查找包。

而是改变GOPATH每一个项目,你应该设置GOPATH一次,并把所有的项目在$GOPATH/src/(您的项目不包含src/目录,他们去src/目录)。

因此,例如,整个树看起来像:

$GOPATH/src/bitbucket.org/ (or GitHub, or your website, or whatever) 
├── YourProject 
└── AnotherProject