入门第 8 / 20 节35 分钟 · 实操
错误处理
Go 课程的一部分
在这门课程里,你已经不止一次敲下 if err != nil,却没有停下来问一句 err 到底是什么、又从哪来。函数会以各种平常且在意料之中的方式失败:调用方要的文件不在磁盘上,调用方给的数字超出了范围,除法的分母是零。程序需要一种方式来报告“这件事没成,原因在这里”,而这种报告要跟真的崩溃区分开,好让调用方能看一眼失败、决定怎么应对,然后继续跑下去。Go 把这套报告机制直接建进语言本身,而不是另外拼一个异常机制上去。这一课讲的就是如何按地道的 Go 代码那样使用它:朴素地返回错误,在错误向上传递的过程中补充上下文,并分清哪些失败程序应该恢复过来,哪些失败意味着已经坏到没法收拾。
上一课里你见过接口,它就是一串方法签名,任何类型只要拥有对应的方法就满足它,两者之间不需要任何声明来关联。error 是这个想法最简单不过的例子,而且直接内置在语言里:
你将学到什么
- Error interface
- Fmt.Errorf with %w
- Errors.Is
- Errors.As
- Custom error types
- Panic vs error
- Wrapping context into errors
