我是Golang的新手。 据我了解,当您要创建一个新的Go项目时,我们只需要创建一个目录即可。 然后,我们将环境变量GOPATH指向此目录。 在此目录中,我们创建三个子目录pkgsrcbin。 然后,当我们执行go get ...时,第三方软件包将安装在pkg子目录中。 以后,如果我要创建另一个Go项目,则创建一个名为project2的新目录,并将GOPATH指向project2。 此时,go get ...将在project2的pkg子目录中下载第三方程序包。 我的问题是,Go是否有一个中央存储库? 否则,如果在两个不同的项目中使用相同的软件包,它们将被下载两次。 真的吗?


我猜现在有https://gocenter.jfrog.com/
此博客中的更多信息https://jfrog.com/blog/go-at-full-speed-with-gocenter


没有go软件包的中央存储库。 Go总是在GOPATH或GOROOT中寻找软件包。只需使用git或mercurial下载软件包即可。我建议你阅读
https://golang.org/doc/code.html
和https://peter.bourgon.org/go-best-practices-2016/#repository-structure

GOPATH只是告诉go编译器在哪里搜索srcpkg目录。


Later if I want to create another Go project, I create a new dir called project2 and point GOPATH to project2

My question is, whether Go has a central repository? If not, the same package will be downloaded twice if they are used in two different projects. Is that true?

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

这里的误解是GOPATH指向单个项目:不是。相反,GOPATH指向所有软件包都存在的环境。它是go get下载软件包的地方,而go build在构建时将寻找软件包的地方。

不必为每个项目更改GOPATH,而是应该设置一次GOPATH,并将所有项目放入$GOPATH/src/(您的项目不包含src/目录,它们位于src/目录中)。

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