如何优雅的在 Golang 中进行错误处理
如何优雅的在Golang
中进行错误处理?
答案是:没有……(本文完)
开个玩笑,Golang
中的错误处理方式一直是社区热烈讨论的话题,有力挺者,有抱怨者,但不论如何,自 2009 年Golang
正式发布以来,关于错误处理就一直是现在这种状况。
随着Golang
愈加的火爆,原本是Java
、Node
、C#
等语言擅长的应用级开发领域也逐渐出现Golang
的身影。Golang
自身其实更加擅长做基础设施级开发,例如docker
,例如k8s
,再如etcd
,它友好的内存管理和简单到粗暴的语法(25 个关键字),特别适合过去C
和C++
这些语言所擅长的部分场景。我们有理由相信,Golang
下一个大的引爆点将也许会在IoT
上,因为它天然的适合。
当一门语言火起来,就会出现各式各样的应用,于是MVC
框架有了,音视频处理库有了,各种数据库驱动有了,甚至服务框架也出现了,游戏、Machine Learning
都不在话下,还要啥自行车?组合一下做应用级开发妥妥的没毛病。
但是,成也这 25 个关键字,败也这 25 个关键字,究其根本原因,都是因为它背后简单的哲学。
做应用级开发可不是那么简单的,这涉及到很多的细节处理,例如本文将要讨论的错误处理。如果只是写一个库,那么这个话题相对比较简单,因为与API
打交道的都是开发者,你只管开心的往外扔error
就好了,总会有倒霉的程序员在使用你的代码时DEBUG到白头,最后,以最严谨的方式,小心使用你的库;可是有人出现的地方就会有幺蛾子,一个常见的误区就是将业务错误、运行时错误、程序错误一股脑的当成相同的error
来处理。