golang:errors

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

                                                                                                     

今天来讲讲golang中最不优雅的东西,错误处理!在常用的高级语言中,我们的异常抛出可以使用throw exception,然后使用try catch来捕获异常(异常和逻辑错误都混在一起使用),异常类型细分的话可以自定义很多exception子类。
但是在golang中我们却不能这样做,我们只能通过检查返回值来判断错误类型。(golang 中通过panic和recover来处理异常)

今日代码

package main  import "errors" import "fmt"  func f1(arg int) (int, error) {     if arg == 42 {         return -1, errors.New("can't work with 42")     }     return arg, nil }  type argError struct {     arg  int     prob string }  //自定义错误处理函数 func (e *argError) Error() string {     return fmt.Sprintf("%d - %s", e.arg, e.prob) }  func f2(arg int) (int, error) {     if arg == 42 {         return -1, &argError{arg, "can't work with it"}     }     return arg, nil }  func main() {     // 假想场景是筛选出42号螺丝,因为他太粗了!     //使用内建错误抛出     for _, i := range []int{7, 8, 42} {         if r, e := f1(i); e != nil {             fmt.Println("f1 failed:", e)         } else {             fmt.Println("f1 worked:", r)         }     }     //使用自定义错误抛出     for _, i := range []int{7, 42} {         if r, e := f2(i); e != nil {             fmt.Println("f2 failed:", e)         } else {             fmt.Println("f2 worked:", r)         }     }      //下面的内容用到断言,详细的介绍看这篇博文     //http://blog.csdn.net/kjfcpua/article/details/18667255     _, e := f2(42)     if ae, ok := e.(*argError); ok {          //等同于这样写         // ae, ok := e.(*argError)         // if ok {          fmt.Println(ae.arg)         fmt.Println(ae.prob)     } }

输出结果

f1 worked: 7                                                              f1 worked: 8                                                              f1 failed: can't work with 42                                             f2 worked: 7                                                              f2 failed: 42 - can't work with it                                        42                                                                        can't work with it

参考文章

  • http://www.tuicool.com/articles/BnI3Mv2  

  • http://blog.csdn.net/kjfcpua/article/details/18667255  

  • https://gobyexample.com/errors  


版权申明:练习代码出https://gobyexample.com。其他为本人翻译或者创作,不代表源文作者和网站的观点。扫描二维码获取更多编程和科普小知识。

golang:errors



查看原文:http://www.zoues.com/2016/10/20/golangerrors/

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

本文来自:CSDN博客

感谢作者:u012798391

查看原文:golang:errors

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

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