我是Golang的新手。据我所知,当你想创建一个新的Go项目时,我们只需要创建一个目录。然后我们将环境变量GOPATH
指向此目录。在此目录中,我们创建了三个子目录pkg
,src
和bin
。然后,当我们执行go get ...
时,第三方软件包将安装在pkg
子目录中。稍后,如果我想创建另一个Go项目,我创建一个名为project2的新目录,并将GOPATH
指向project2。此时go get ...
将在project2的pkg
子目录中下载第三方软件包。我的问题是,Go是否有一个中央存储库?如果没有,如果在两个不同的项目中使用相同的包,则将下载两次。这是真的吗?
答案 0 :(得分:8)
答案 1 :(得分:4)
没有go包的中央存储库。 Go总是在GOPATH或GOROOT中寻找包裹。 go get使用git或mercurial简单地下载包。我建议你阅读 https://golang.org/doc/code.html 和https://peter.bourgon.org/go-best-practices-2016/#repository-structure
GOPATH只是告诉编译器在哪里搜索src
,pkg
目录。
答案 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 只有一小部分我们打算构建的功能,我们正在积极寻求反馈
但正如关于页面所写的那样,它仍处于早期开发阶段。也许有一天(希望)它会成为一个功能齐全的代码库。