异常处理
Go 中的异常处理
错误处理是每个编程语言都要考虑的一个重要话题。在
排除异常的情况,如果程序运行失败仅被认为是几个预期的结果之一。对于那些将运行失败看作是预期结果的函数,它们会返回一个额外的返回值,通常是最后一个来传递错误信息。如果导致失败的原因只有一个,额外的返回值可以是一个布尔值,通常被命名为
if v, ok := m["key"]; ok {
return v
}
但是导致失败的原因通常不止一种,很多时候用户希望了解更多的错误信息。如果只是用简单的布尔类型的状态值将不能满足这个要求。在
比如我们通过syscall
包的接口来修改文件的模式时,如果遇到错误我们可以通过将err
强制断言为syscall.Errno
错误类型来处理:
err := syscall.Chmod(":invalid path:", 0666)
if err != nil {
log.Fatal(err.(syscall.Errno))
}
我们还可以进一步地通过类型查询或类型断言来获取底层真实的错误类型,这样就可以获取更详细的错误信息。不过一般情况下我们并不关心错误在底层的表达方式,我们只需要知道它是一个错误就可以了。当返回的错误值不是 nil
时,我们可以通过调用 error
接口类型的 Error
方法来获得字符串类型的错误信息。
Links
- 2017-Pipeline Patterns in Go: In this article, that pipeline pattern in Golang is extended with improved error-handling and cancellation.