Sentinel errors 哨兵模式,例如 ​ if io == io.EOF 优缺点:需要导包,可能循环引用 Error Types ​ 包含error以及其它信息的结构体 优缺点:需要导包,循环引用。但可得到更多的信息。比哨兵模式更好一点。 Opaque errors 黑盒策略,不关心具体错误类型,有错误则返回否则继续或根据是否具有某种行为(实现某种接口)判断是否重试。demo: func fn() error { x, err := bar.Foo() if err != nil { return err } // use x return nil } // type temporary interface { Temporary() bool} func IsTemporary(err error) bool { te, ok := err.(temporary) return ok && te.Temporary() } pkg/errors 携带一个message并可返回原始error以进行Sentinel errors比较的库:github.com/pkg/errors 可避免在多个层多次处理eror go1.13标准库的升级 https://www.flysnow.org/2019/09/06/go1.13-error-wrapping.html errorf %w –>不丢失原error的wrap error。 Unwrap 解一层wrap error Is wrap chain中是否包含 As error转换(断言) rob pike:Errors are values 法1:……

Continue reading