V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
gitrebase
V2EX  ›  Go 编程语言

关于 Go 的 errors 库,应该用官方的、功能不多的 errors 还是功能丰富但已被 archived 的 pkg/errors 呢

  •  
  •   gitrebase · 2023-08-21 11:00:43 +08:00 · 2482 次点击
    这是一个创建于 461 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想问问大家一般在项目中使用哪个 errors 库?

    个人之前使用的都是 pkg/errors ,Wrap 函数的使用频率较高、带堆栈信息,而且也提供了更多的函数

    但是 errorsJoin 好像在 pkg/errors 中没有一个比较好的替代方案?而且 pkg/errors 的 GitHub 仓库在 2021 年就 archived 了(虽然这个库还是很流行,但不知道会不会有什么影响?)

    errors 、pkg/errors 都有的函数:

    • As(err, target)
    • Is(err, target)
    • New(text)
    • Unwrap(err)

    errors 有、pkg/errors 没有的函数:

    • Join(errs)

    pkg/errors 有、没有的函数:

    • Cause(err)
    • Errorf(format, args)
    • WithMessage(err, message)
    • WithMessagef(err, format, args)
    • WithStack(err)
    • Wrap(err, message)
    • Wrapf(err, format, args)
    11 条回复    2023-08-21 21:10:45 +08:00
    kingofzihua
        1
    kingofzihua  
       2023-08-21 11:10:22 +08:00   ❤️ 2
    kingofzihua
        2
    kingofzihua  
       2023-08-21 11:13:37 +08:00
    自己本地写个 pkg/errors 包转化下不就好了

    ```go

    package errors

    import (
    perr "github.com/pkg/errors"
    )


    func New(msg string) error { return perr.New(msg) }

    ...
    gitrebase
        3
    gitrebase  
    OP
       2023-08-21 11:22:46 +08:00
    @kingofzihua cool lib ,还没细看,但看着像 pkg/errors plus ?
    bruce0
        4
    bruce0  
       2023-08-21 11:24:46 +08:00
    我们是两个都用, 需要堆栈信息的就 pkg/error, 否则就 go 自带的, 至于后面 error 新加的功能, 要么自己拓展(改一下 pkg 的源码) 要么想法办在使用的时候避免一下
    Trim21
        5
    Trim21  
       2023-08-21 11:27:12 +08:00 via Android
    pkg/errors 里面的 is as 这些方法就是直接调用了标准库的同名方法。
    kingofzihua
        6
    kingofzihua  
       2023-08-21 11:33:27 +08:00
    @gitrebase 是的,升级版
    joesonw
        7
    joesonw  
       2023-08-21 11:38:17 +08:00 via iPhone
    wrap with 这些 fmt.Errorf 都可以呀
    flyqie
        8
    flyqie  
       2023-08-21 15:10:36 +08:00
    https://github.com/hashicorp/go-multierror

    楼主也可以试试这个?
    paceewang1
        9
    paceewang1  
       2023-08-21 15:33:19 +08:00
    官方的 1.20 支持 join 了吧
    cmdOptionKana
        10
    cmdOptionKana  
       2023-08-21 16:04:14 +08:00
    官方 errors 的一部分功能被分割到 fmt.Errorf 里去了,看这里 https://go.dev/blog/go1.13-errors
    kkhaike
        11
    kkhaike  
       2023-08-21 21:10:45 +08:00
    multi error 使用 https://github.com/hashicorp/go-multierror
    error format 用 golang.org/x/xerrors
    其他情况都可以用 errors / fmt.Errorf
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2754 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:33 · PVG 14:33 · LAX 22:33 · JFK 01:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.