go语言中错误处理方式:
defer,panic,recover。
go中可以抛出一个panic异常,然后在defer中,通过recover捕获这个异常,然后进行处理。
示例:err1.go代码
package errlab
import "fmt"
//defer recover 来处理错误
func Testerr(){
//使用defer+recover来捕获和处理异常
//匿名函数
defer func(){
err:=recover() //recover()是内置函数,可以捕获异常
if err!=nil{ //捕获到错误
fmt.Println("err=",err)
}
}()
num1:=10
num2:=0
res:=num1/num2
fmt.Println("res=",res) //err= runtime error: integer divide by zero
}
main主函数
func main() {
//错误err的练习
errlab.Testerr()
fmt.Println("错误后是否会输出@!!")
}
输出结果:
err= runtime error: integer divide by zero
错误后是否会输出@!!
上面的异常,没有影响主程序的代码,主程序继续向下执行了
“”“错误后是否会输出@!”内容---》说明主程序继续执行了。
自定义错误类型:
func Dingyierr(){
callconfig()
fmt.Println("callconfig的函数以及下面的代码!")
}
//函数去读取配置文件config。int的信息
//如果文件名不正确就是返回错误
func readconfig(name string )(err error){
if name=="config.ini"{
return nil
}else {
return errors.New("读取文件错误...") //自定义错误内容事项
}
}
//调用上面的函数readconfig()
func callconfig(){
err:=readconfig("config2.ini")
if err!=nil{
//如果读取文件发送错误,就是输出这个错误,并终止程序
panic(err) //panic后,就是终止了程序继续执行了!!!
}
fmt.Println("callconfig继续执行。。。。")
}