我是Golang的新手。据我所知,当你想创建一个新的Go项目时,我们只需要创建一个目录。然后我们将环境变量GOPATH
指向此目录。在这个目录中,我们创建了三个子目录pkg
,src
和bin
。然后当我们执行go get ...
时,第三方包将安装在pkg
子目录中。后来如果我想创建另一个Go项目,则创建一个名为project2的新目录并将GOPATH
指向project2。此时go get ...
将下载项目2的pkg
子目录中的第三方包。我的问题是,Go是否有中央存储库?如果没有,如果在两个不同的项目中使用相同的软件包,则会下载两次。真的吗?golang是否有下载的第三方软件包的中央存储库?
3
A
回答
3
没有中央软件包的存储库。 Go总是在GOPATH或GOROOT中寻找软件包。只需使用git或mercurial下载软件包即可。我建议你阅读 https://golang.org/doc/code.html 和https://peter.bourgon.org/go-best-practices-2016/#repository-structure
GOPATH简单地告诉编译器去哪里寻找src
,pkg
目录。
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
通过“中央资源库”,你的意思是一个本地缓存?这是您的GOPATH,您可以为多个项目使用相同的GOPATH。 – JimB
如果我在project1上工作,我将GOPATH指向project1。后来我在project2上工作,我应该把GOPATH指向project2吗?如果是这样,GOPATH不是本地缓存...... – user130268
GOPATH不是您的项目的根源。您的项目应位于'$ GOPATH/src'下的导入路径中。请参阅[如何编写Go代码](https://golang.org/doc/code.html) – JimB