Go 自定义error错误的处理方法
Go的error比较灵活.但是自身对error处理的机制有不太好用,我们可以自定义错误输出:
只要所有实现了Error()方法的对象都可以,这里给个比较简单的demo,后续整理一个error的优化封装:
packagemain
import(
"fmt"
)
typeNameEmtpyErrorstruct{
namestring
}
//NameEmtpyError实现了Error()方法的对象都可以
func(e*NameEmtpyError)Error()string{
return"name不能为空"
}
funcNameCheck(namestring)(bool,error){
ifname==""{
returnfalse,&NameEmtpyError{name}//注意error这里必须是地址&引用
}
returntrue,nil
}
funcmain(){
name:=""
ifcheck,err:=NameCheck(name);err!=nil{
fmt.Println(err)
}else{
fmt.Println(check)
}
}
在go里定义错误异常的方式有这么两种,但都需要你的返回值是error类型的:
第一种方式是使用golang标准库包errors来定义错误。使用方法很简单,只需要returnerrors.New(“错误信息”)。这样就是一个最简单的错误返回。
第二种方式是借用struct结构体,创建一个struct的Error()方法,注意这个方法名是Error,不然会出现找不到Error方法。
下面我们看一个比较完整的Error的使用方法。不仅有errors,还有structError()方式.
packagemain
import(
"errors"
"fmt"
)
typeequalErrorstruct{
Numint
}
//方法名字是Error()
func(eequalError)Error()string{
returnfmt.Sprintf("当前数字是%d,大于10",e.Num)
}
//使用errors.New简单生成
funcEqual(nint)(int,error){
ifn>10{
return-1,errors.New("大于10")//生成一个简单的error类型
}
returnn,nil
}
funcDiyEqual(nint)(int,error){
ifn>10{
return-1,equalError{Num:n}//会调用equalError的Error方法
}
returnn,nil
}
funcmain(){
//使用errors.New生成error对象
ifresult,err:=Equal(20);err!=nil{
fmt.Println("错误:",err)
}else{
fmt.Println("结果:",result)
}
//不适用erros,自定义错误方式.
ifresult,err:=DiyEqual(20);err!=nil{
fmt.Println("错误:",err)
}else{
fmt.Println("结果:",result)
}
}
当然实际开发项目也不建议这么写,太lower不说,也不好扩展.下一篇准备写个demo,封装优化错误输出的处理.
到此这篇关于Go自定义error错误的文章就介绍到这了,更多相关Go自定义error错误内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!