golang:errors

                                                                                                     

今天来讲讲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/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值