如何在golang中更新软件包?

如何在golang中更新软件包?,go,package,version,Go,Package,Version,我读过一大堆关于导入第三方go软件包的文章和问题,这些问题看起来都很简单,但我不明白的是,我读过的文章中没有一篇提到版本控制。在Dartlang中,有一个pubspec文件,它定义了您的包,包括它的版本和它的依赖项,包括它们所需的版本。如果我做一个去获取github.com/gorilla/sessions并编写我的应用程序,那么6个月后我必须清除我的目录并重新获取所有内容,在这段时间内,该软件包已更新,并且与使用旧版本的我的代码的向后兼容性已被破坏?官方版本,来自: 如果您使用的是外部提供的软

我读过一大堆关于导入第三方go软件包的文章和问题,这些问题看起来都很简单,但我不明白的是,我读过的文章中没有一篇提到版本控制。在Dartlang中,有一个pubspec文件,它定义了您的包,包括它的版本和它的依赖项,包括它们所需的版本。如果我做一个
去获取github.com/gorilla/sessions
并编写我的应用程序,那么6个月后我必须清除我的目录并重新获取所有内容,在这段时间内,该软件包已更新,并且与使用旧版本的我的代码的向后兼容性已被破坏?

官方版本,来自:

如果您使用的是外部提供的软件包,并且担心它可能会以意外的方式发生更改,那么最简单的解决方案是将其复制到本地存储库。(这是谷歌内部采取的方法。)将副本存储在新的导入路径下,该路径将其标识为本地副本

这种方法有很多替代方法,主要是基于声明您正在使用的项目的确切版本

例如,请参见“”(基于)

Go依赖关系管理的主要不同选项列在:


(及其合伙人)

2015年7月更新:

  • Go团队的官方销售方法是
  • 一个名为“gb”的替代go构建工具由提出
2017年第4季度更新:如前所述,是固定依赖项版本的官方工具(尽管这种固定方法并非没有批评:请参见“”。
当Go 1.10开发开始时,它应该合并到工具链中


2018年第二季度更新:
go-dep
已被替换为,。

我将
dep
用作
golang
项目的依赖关系管理工具。请使用以下链接了解更多信息

dep
是Go的依赖项管理工具。它需要Go 1.9或更新版本才能编译

dep
是“官方实验”。从1.11开始,Go工具链(实验性地)采用了一种与dep截然不同的方法。因此,我们正在继续开发dep,但主要致力于开发工具链中版本控制行为的替代原型

当前状态:2019年1月

dep
对于生产使用是安全的


+1包括良好的链接。我喜欢使用gopkg.in(在您的上一个链接中提到),因为它似乎是一种明智的方式来声明“我想要什么版本?”,因为“我想要什么提交哈希?”对于使用您编写的东西的新开发人员来说有点神秘。挑剔:最近的通信崩溃发生在正式宣布“go模块”时,揭示了Go核心团队从未真正打算合并Go dep,并将其视为一项社区驱动的实验,以探索哪些可行,哪些不可行。不幸的是,山姆·博耶(Sam Boyer)和核心团队的鲁斯·考克斯(Russ Cox)的幕后主使未能在对话的两端以同样的方式理解这个想法。TL;博士,
godep
是一个“幸运的实验”,但仅此而已。@kostix是的:如果你想了解更多细节,我发现这条线索很有趣:(也在中)。加上屏幕广播。请注意,这只是故事的一个方面,不幸的是,这是一个非常有偏见的方面,原因可能很明显,-另一个可能会被研究,比如,-在从那里链接的twitter线程中。@Dominic只需按照semver约定()用标签标记你的源代码,然后将它们向后推()看,请更正。Go dep要求1.9或以上。请参阅此处的自述。