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

golang是否有下载的第三方软件包的中央存储库?,go,package,Go,Package,我是刚来戈朗的。据我所知,当您想要创建一个新的Go项目时,我们只需要创建一个目录。然后我们将环境变量GOPATH指向该目录。在这个目录中,我们创建了三个子目录pkg,src和bin。然后,当我们执行go get…时,第三方软件包将安装在pkg子目录中。稍后,如果我想创建另一个Go项目,我将创建一个名为project2的新目录,并将GOPATH指向project2。此时,go get…将在project2的pkg子目录中下载第三方软件包。我的问题是,Go是否有一个中央存储库?如果没有,同一软件包将

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

没有go软件包的中央存储库。Go总是在GOPATH或GOROOT中查找包。go get simply使用git或mercurial下载软件包。我建议你读书 及

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

稍后,如果我想创建另一个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

更新 值得注意的是,这个答案不再正确。既然Go模块是Go代码的正常版本控制机制,并且,
$GOPATH
正在逐步淘汰,那么已经设置了一个中央代理,它通过Google服务器路由所有包请求,在那里可以缓存包的各种标记版本。一个单独的校验和数据库为每个可审计的包保留哈希值,可以帮助您检测包作者是否更改了已发布的标记。所有这些都不是一个中央存储库,与PyPi(在Python世界中)或NPM(用于JavaScript)是一个repo的意义相同:这些包仍然是从它们的源代码控制中获取的,但由于默认情况下所有包都是通过代理路由的,因此它也有类似的用途。有关更多信息,请参见

我想现在有了
更多信息在本博客中

最近,一个收集围棋软件包信息的新网站出现了:

dev是go用户的中心,为整个go生态系统提供集中和精心策划的资源

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

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


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

所谓“中央存储库”,是指单个本地缓存吗?这是您的GOPATH,您可以对多个项目使用相同的GOPATH。如果我正在处理project1,我会将GOPATH指向project1。稍后我将处理project2,我是否应该将GOPATH指向project2?如果是这样,GOPATH不是本地缓存…GOPATH不是项目的根。您的项目应该位于导入路径下的
$GOPATH/src
。请参见
ln-s$GOPATH/src/github.com/user130268/my-cool-project~/dev/my-cool project
是您的friend@Plato,我要说的是
CDPATH
env。大多数交互式Shell理解的变量是您的好友。Bintray/GoCenter正在停用。因此,在不久的将来,这不是一个好的选择。