我已经阅读了大量关于导入第三方go包的文章和SO问题,这些都看起来很简单,但我不明白的是,我所读到的都没有提到版本化。在Dartlang中,pubspec文件定义了您的软件包,包括其版本及其依赖项,包括其所需的版本。如果我做了go get github.com/gorilla/sessions
然后写了我的应用程序然后6个月后我必须清除我的目录然后重新获得所有内容,在这个时候该软件包已经更新并且向后兼容我使用旧代码的代码版本
答案 0 :(得分:19)
正式版,来自GO FAQ:
如果您使用外部提供的软件包并担心它可能会以意外方式更改,最简单的解决方案是将其复制到本地存储库。 (这是Google内部采用的方法。)将副本存储在新的导入路径下,将其标识为本地副本。
该方法有很多替代方案,主要基于声明您正在使用的项目的确切版本。
例如,请参阅“Dead Simple Dependencies in Go -- Keep it simple and keep your sanity.”(基于emil2k/vend
)
Go Dependency Management的主要不同选项列于:
“的 Go Package Management -- A summary of dependency management in Go 强>”
(及其同事GOPM mailing list)
2015年7月更新:
2017年第四季度更新:如上所述below,go dep
是固定依赖关系版本的官方工具(尽管这种固定方法并非没有批评:见“The cargo cult of versioning”)。
当Go 1.10开发开始时,它应该合并到工具链中,according to its roadmap。
2018年第二季度更新:go dep
已替换为go mod
(modules) in Go 1.11,following works on vgo
。
答案 1 :(得分:2)
我使用dep
作为golang
项目的依赖管理工具。请使用以下链接dep tool获取更多信息。
dep
是Go的依赖管理工具。它需要Go 1.9或更新版本才能编译。
dep
是“官方实验”。 Go工具链,从1.11开始,(实验上)采用了一种与dep明显不同的方法。因此,我们正在继续开发dep,但是传动工作主要是为了开发工具链中版本化行为的替代原型。
当前状态: 2019年1月
dep
对于生产使用是安全的。