1.Indented flow is for errors 无错误的正常流程代码,将成为一条直线

2.Wrap errors 包装的错误

减少if err != nil的办法,如果你调用方法或函数不是顶层的业务层,可以直接返回调用,不用再进行单独的err判断,使用warp errors进行错误的包装不仅可以精简代码量,而且使的你的业务主干逻辑更清晰,我们可以使用一些技巧来消除多余的err判断

日志记录与错误无关且对调试没有帮助的信息应被视为噪音,应于以质疑

1> 错误需要被日志记录

2> 应用程序处理错误,保证100%完整性

3> 之后不再报告当前错误

如果使用pkg/errors包,可以向错误值中添加上下文,使用%+v可以打印详细的错误堆栈信息

使用errors.Cause获取root error,在进行和sentinel error判定

总结:

1> 选择warp error是只有applications可以选择应用的策略。具有最高可重用性的包只能返回去根错误值。此机制与Go标准库中使用的相同

2> 这是关于函数/方法调用返回的每个错误的基本问题。如果函数/方法不打算处理错误,那么用足够的上下文wrap errors并其返回到调用堆栈中

3> 一旦确定函数/方法将处理错误,错误就不再是错误。如果函数/方法仍然需要发出返回,则它不能返回错误值。它应该只返回零