错误是什么

错误(error)表示程序出现了不正常的状况

在golang中,错误处理的机制非常简洁,它内置了一个error接口,所有实现了其Error方法的类型,都可以用于表示错误

也正因为它错误处理机制过于简洁(错误信息只有一段字符串),深受大家诟病

其实我个人觉得,只要采取正确的姿势,golang的错误处理也能够很优雅


正确的错误处理姿势

bad是坏姿势,good是正确姿势

1)没有错误时不要返回error:

不要多此一举

2)只有一种错误时,不要返回error,而是bool:

不要太罗嗦

3) error或bool应该置于函数最后一个返回值处:

标准包都是这样做的

4) 把可能出现的有限多个错误,定义成全局变量:

io包定义了一批全局错误

在代码里就可以像这样判断各种错误而执行不同的操作:

5) 在结构体的字段中获取更多关于错误的信息:

os包的PathError包装了更多错误信息于字段中

将错误接口类型转为具体的错误类型后就可以获取字段了:

6) 在结构体的方法中获取更多关于错误的信息:

net包的DNSError可通过方法获得更多错误信息

将错误接口类型转为具体的错误类型后就可以调用方法了:









貌似也没有多优雅吧,嵌套了一堆IF/ELSE (=。=||)