golang是否有下载第三方软件包的中央存储库?

时间:2016-07-26 17:00:59

标签: go package

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

4 个答案:

答案 0 :(得分:8)

答案 1 :(得分:4)

没有go包的中央存储库。 Go总是在GOPATH或GOROOT中寻找包裹。 go get使用git或mercurial简单地下载包。我建议你阅读 https://golang.org/doc/code.htmlhttps://peter.bourgon.org/go-best-practices-2016/#repository-structure

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

答案 2 :(得分:1)

  

稍后如果我想创建另一个Go项目,我创建一个名为project2的新目录并将GOPATH指向project2   ...   我的问题是,Go是否有一个中央存储库?如果没有,如果在两个不同的项目中使用相同的包,则将下载两次。这是真的吗?

不,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

答案 3 :(得分:0)

最近出现了一个收集 Go 包信息的新网站: https://go.dev/

<块引用>

go.dev 是 Go 用户的中心,提供来自整个 Go 生态系统的集中和精选资源。

它是 golang.org 的官方配套网站。它不符合存储库的条件,例如 cpan、nmpjs、nuget 或 crates。对于外部包,它只是链接到各自的 Github 页面。

<块引用>

Go.dev 目前处于 MVP 状态。我们为我们所做的一切感到自豪,并很高兴与社区分享。我们希望您在使用 go.dev 中找到价值和乐趣。 Go.dev 只有一小部分我们打算构建的功能,我们正在积极寻求反馈

但正如关于页面所写的那样,它仍处于早期开发阶段。也许有一天(希望)它会成为一个功能齐全的代码库。