我想保持我的go.mod
依赖关系为最新。使用Node.js,我运行npm outdated
(随后运行npm update
)。
Go mod最接近什么?
理想情况下,我会看到我的项目过时依赖项的报告(并非全部都是递归的)。谢谢
答案 0 :(得分:5)
这在Go 1.11 Modules: How to Upgrade and Downgrade Dependencies Wiki中有详细说明:
要查看所有直接和间接依赖项的可用次要和补丁升级,请运行
go list -u -m all
。要针对当前模块的所有直接和间接依赖关系升级到最新版本,请执行以下操作:
- 运行
go get -u
以使用最新的次要版本或修补程序版本- 运行
go get -u=patch
以使用最新的修补程序版本
您可以在此处阅读更多详细信息:Command go: List packages or modules。
还有一个第三方应用程序:https://github.com/psampaz/go-mod-outdated:
一种简单的方法来查找Go项目的过时依赖项。 go-mod-outdated提供了go list -u -m -json all命令的表视图,该命令列出了Go项目的所有依赖项及其可用的次要和补丁更新。它还提供了一种方法来过滤间接依赖关系和没有更新的依赖关系。
如果您对间接依赖项不感兴趣,我们可以将其过滤掉。没有用于过滤间接依赖项的标志,但是我们可以使用自定义输出格式来做到这一点。
-f
标志使用程序包模板的语法为列表指定备用格式。
因此您可以将格式指定为模板文件,并符合text/template
。
在列出模块时,
-f
标志仍然指定应用于Go结构的格式模板,但是现在是Module
结构:type Module struct { Path string // module path Version string // module version Versions []string // available module versions (with -versions) Replace *Module // replaced by this module Time *time.Time // time version was created Update *Module // available update, if any (with -u) Main bool // is this the main module? Indirect bool // is this module only an indirect dependency of main module? Dir string // directory holding files for this module, if any GoMod string // path to go.mod file for this module, if any Error *ModuleError // error loading module } type ModuleError struct { Err string // the error itself }
注意:此Module
结构是在命令go:https://godoc.org/cmd/go/internal/modinfo
例如,像以前一样列出直接和间接依赖关系,但现在也可以在间接依赖关系之后附加一个IAMINDIRECT
字,可以这样:
go list -u -m -f '{{.}}{{if .Indirect}} IAMINDIRECT{{end}}' all
否定逻辑,以列出直接和间接依赖关系,但是这次仅用IAMDIRECT
“标记”直接依赖关系:
go list -u -m -f '{{.}}{{if not .Indirect}} IAMDIRECT{{end}}' all
我们快到了。现在,我们只需要过滤掉不包含IAMDIRECT
字的行:
go list -u -m -f '{{.}}{{if not .Indirect}} IAMDIRECT{{end}}' all | grep IAMDIRECT
以上解决方案基于grep
命令。但实际上我们不需要。如果指定的模板导致文档为空,则从输出中跳过该行。
所以我们可以达到以下目的:
go list -u -m -f '{{if not .Indirect}}{{.}}{{end}}' all
基本上,如果不是间接的,我们仅调用Module.String()
(仅包括依赖项)。作为一项额外收益,该解决方案也可以在Windows上使用。
类似地,我们过滤掉间接依赖关系,这也是“小菜一碟”,因为Module
结构包含一个Update
字段,用于具有更新的包/模块:
go list -u -m -f '{{if .Update}}{{.}}{{end}}' all
另请参阅相关问题:How to list installed go packages