go - linter err113 : do not define dynamic errors,改用包装的静态错误

标签 go

我正在使用err113作为golangci-lint的一部分。

它在提示...

foo_test.go:55:61: err113: do not define dynamic errors, use wrapped static errors instead: "errors.New(\"repo gave err\")" (goerr113)
        repoMock.EXPECT().Save(gomock.Eq(&foooBarBar)).Return(nil, errors.New("repo gave err")),
                                                                  ^

foo_test.go:22:42: err113: do not define dynamic errors, use wrapped static errors instead: "errors.New(\"oops\")" (goerr113)
    repoMock.EXPECT().FindAll().Return(nil, errors.New("oops"))
                                            ^

解决此问题的最佳方法是什么?

引用https://github.com/Djarvur/go-err113

Also, any call of errors.New() and fmt.Errorf() methods are reported except the calls used to initialise package-level variables and the fmt.Errorf() calls wrapping the other errors.



我正在尝试为此举一个惯用的例子。

最佳答案

根据建议声明包级变量:

 var repoGaveErr = errors.New("repo gave err")

 func someFunc() {
    repoMock.EXPECT().Save(gomock.Eq(&foooBarBar)).Return(nil, repoGaveErr)
 }

每次调用error.New都会分配一个新的唯一错误值。应用程序通过声明包级变量来创建表示错误的单个值。

单一值(value)有两个动机:
  • 应用程序可以比较相等性的值以检查特定的错误情况。
  • 减少内存分配(尽管实际上可能没什么大不了的)

  • io.EOF是一个典型示例。

    关于go - linter err113 : do not define dynamic errors,改用包装的静态错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62291709/

    相关文章:

    networking - 如何获取 (IPv4) net.IPNet 的广播地址?

    go - 嵌入式方法可以访问 "parent"字段吗?

    go - 避免在 html 模板中自动转义

    go - GO中的嵌套函数调用

    http - 如何将 URL 查询参数添加到 HTTP GET 请求?

    string - 如何在golang中替换字符串中的所有字符

    go - 如何在Go中逐行打印没有括号的 slice 中的元素?

    go - 根据 Golang 中的不同 slice 过滤结构 slice

    arrays - 从数组结构呈现 json 的问题

    go - Go中的后进先出容器