Golang 中错误与异常需要重新认识

grimm · · 770 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

如何进行错误处理,这是一个Go程序员之间,特别是一些新的Go程序员,会经常讨论的问题.讨论到最后往往由于以下代码的多次出现而变成了抱怨.

if err != nil {
    return err
}

我们最近扫描了我们能找到的开源项目,这段代码只在一页或者两页中出现了一次,是不是比你想象的少很多.然而,必须到处写 if err != nuil的感觉依然存在 , 那一定是哪里出了问题,而且明显问题出在Go自己身上.

不幸的是,这是一个误解,而且很容易纠正.或许一个新的Go程序员想问 “怎么会只有一个错误处理?”,那么学习这种模式,保持它.在其它语言中可以使用try-catch或者其他类似机制去处理错误.因此程序员认为,当我需要在其他语言中使用try-catch的时候,我只需要在Go写if err != nil,随着时间的推移Go代码里会出现很多这样的代码片段,结果感觉很笨拙.

不管这个解释是否符合,很显然这些Go程序员忘记了一个关于错误的基本观点:错误也是值.

值可以被编程,因此错误也是值,错误也可以被编程

Values can be programmed, and since errors are values, errors can be programmed.

当然一个常用的涉及到错误值的语句是测试它是不是nil , 但是也有无数的其他事情可以用错误值来做.使用一些其他事情可以让你更好的编程,可以很大程度排除使用if语句检查错误的固定模式.

这是一个简单的示例,来自bufio 包的Scanner类型.它的 Scan方法执行底层的I/O操作,显然它可能引起一个错误.然而Scan方法并不会暴露错误.他返回一个布尔值,通过在Scan运行之后执行的另一个方法来报告是否发生了错误.调用代码如下:


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:grimm

查看原文:Golang 中错误与异常需要重新认识

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

770 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传