如果ReadConfig()执行失败,就会得到下面这一行十分美观的报错:
could not read config: open failed: open /Users/dfc/.settings.xml: no such file or directory
而如果用fmt.Printf和%+v格式来输出就能看到更清晰、更有层次的错误堆栈:
func main() {_, err := ReadConfig()if err != nil {fmt.Printf("%+v",err)os.Exit(1)}}
文章插图
图片
然后我们再来看Cause的使用 。
type temporary interface{Temporary() bool}// IsTemporary returns true if err is temporary.func IsTemporary(err error) bool {te, ok := errors.Cause(err).(temporary)return ok && te.Temporary()}
当需要检查一个错误与一个特定的值或类型时 。比如此处,先用Cause取出错误,做断言,最后调用Temporary(),如果断言失败,ok就会是false , 就不会调用右边的Temporary()去执行 。如果 && 运算符左侧的子表达式为 false,则不会检查右侧的表达式 。因为只要有一个子表达式为 false,则整个表达式都为 false,所以再检查剩余的表达式会浪费 CPU 时间 。这被称为短路评估 。
本文转载自微信公众号「 程序员升级打怪之旅」
【聊聊Golang饱受争议的Error】
推荐阅读
- 数据库索引只能用 B 树吗?
- 35岁港星林皓霆烧炭自杀,警方在酒店发现遗书,生前饱受抑郁症困扰
- 聊聊网络结构搜索方法AutoFormer
- 又一位35岁明星自杀去世,生前饱受情绪病折磨,最后露面照曝光
- 聊聊SQL中的排名问题
- Golang 中的字符串:常见错误和优秀实践
- 为什么不吃米饭和面后,身体很快就瘦下来了?和你聊聊减肥的误区
- 聚类算法全面总结!!
- 聊聊抖音的小手柄 一个很神奇的业务
- 噩耗!《匹诺曹》爷爷边希峰病逝,饱受癌症折磨,躲起来悄悄离世