-2

每次在我们的存储库上打开或更新 Pull Request 时,我们都会使用一个 linter(用于 Golang),它会在 Github Actions 工作流程中运行。

它最近开始返回以下错误

File is not `gofmt`-ed with `-s` (gofmt)

在此文件的其他 PRpkg/api/api/go中发生的事情之后。
(编辑:添加链接以评估并最终重现错误)

证据:

原始提交

短绒输出

我想了解这个错误的根源是什么,以及如何解决它?

4

2 回答 2

5

错误来源

当文件没有按照 Go 规则正确格式化时,似乎可以返回此错误。

例如:如果您不小心使用了制表符缩进而不是空格。

编辑:blackgreen 的回答提供了有关错误来源的更准确的详细信息


如何解决

您可以使用以下 Go 命令:

gofmt -s -w <path_to_file>.go

...然后提交代码。

请注意,在我的情况下:gofmt -w pkg/api/api.go足以解决问题(没有-s标志,我发现这很奇怪,因为错误专门要求-s)。

来源 1 +来源 2

于 2021-09-03T18:21:44.530 回答
2

中的-s标志gofmt与格式无关。这是关于简化代码:

尝试简化代码(在应用重写规则后,如果有的话)。

您看到的警告来自 linter golangci-lint。由于您声称已通过运行修复了错误gofmt -w,因此提示“with -s”的存在可能是由于此错误:https ://github.com/golangci/golangci-lint/issues/513 。

链接问题已于 2019 年修复,并随v1.17.0. 您可能想检查您的管道是否使用旧版本。

假设您的文件pkg/api/api.go仅因为未格式化而触发了警告,则gofmt -w解决了该问题,因为-w覆盖了文件:

如果文件的格式与 gofmt 不同,则用 gofmt 的版本覆盖它。

于 2021-09-03T21:38:32.440 回答