golang:errors
发布时间:2020-12-16 18:25:37 所属栏目:大数据 来源:网络整理
导读:今天来讲讲golang中最不优雅的东西,错误处理!在常用的高级语言中,我们的异常抛出可以使用throw exception,然后使用try catch来捕获异常(异常和逻辑错误都混在一起使用),异常类型细分的话可以自定义很多exception子类。 但是在golang中我们却不能这样
版权申明:练习代码出。其他为本人翻译或者创作,不代表源文作者和网站的观点。扫描二维码获取更多编程和科普小知识。查看原文:http://www.zoues.com/2016/10/20/golangerrors/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,&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 _,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 ithttps://gobyexample.com (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |