(*testing.common).Errorf 不支持错误包装指令 %w

Cpt*_*eru 4 unit-testing go

我正在克隆一个私人 go 项目。

在代码编辑器和运行 golangci-lint 时出现以下错误。

代码编辑器截图错误

golangci-lint 截图错误

示例代码是这样的:

func TestAService(t *testing.T) {
    ...
    err := service.AService()
    if err != nil {
        t.Errorf("Error on executing the test cases %w", err)
    }
}
Run Code Online (Sandbox Code Playgroud)

go项目在其他笔记本电脑上运行良好,但我使用的笔记本电脑出现此错误。

两台笔记本电脑使用的go版本都是:go 1.17

Pau*_*kin 6

您发布的屏幕截图不是错误,它们是 IDE 发出的有关代码中潜在问题的警告。

testing.T.Errorf不支持(与支持和不接受的情况%w相同),因此警告是正确的。fmt.Sprintf

这些消息不会阻止代码的构建和运行,但如果出现错误,字符串的格式将被关闭。

如果您运行代码,并且出现错误,您将得到类似这样的信息(后面的部分%!w将取决于您的确切错误值)。

Error on executing the test cases %!w(*errors.errorString=&{some error})
Run Code Online (Sandbox Code Playgroud)

您收到的具体警告可能是 new 1,但我不相信这个错误代码在任何版本的 go 中都能令人满意地工作。当然,由于大多数测试错误通常是看不见的(因为测试通过了),因此该缺陷可能仍然不可见。

修复方法是将%w(wrap error) 替换为%v(以默认方式格式化对象,对于错误将使用其字符串形式)。


1您看到的 lint 消息来自“go tool vet”,由2021 年 5 月提交的此变更列表创建。有可能在您的其他计算机上,您正在使用此工具的早期版本进行 linting。