引言
在go语言中,默认情况下,当程序发生错误(panic),程序就会崩溃退出。如果我们希望当程序发生错误后,可以捕获错误,并处理错误,保证程序继续执行。还可以在捕获错误后发出预警信息(邮件、信息),这就要错误处理。
Go不像Java那样支持 try…catch…finally语法,go引入了defer,panic,recover。简单描述就是go抛出panic异常,在defer中通过recover捕获异常并处理。
案例(除0异常)
func main() {
test()
fmt.Println("结束...")
}
func test(){
// defer + revover捕获异常并处理
defer func() {
err := recover() //捕获异常
if err != nil {
fmt.Println("err = ",err)
//发送预警信息....
}
}()
var num1 int = 10
var num2 int = 0
res := num1/num2
fmt.Println("res = ",res)
}
自定义错误
go语言也可以自定义错误,使用errors.New和panic函数。
- errors.New("错误说明),会返回一个error类型的值,表示一个错误
- panic内置函数,接收一个 interface{}类型的值(也就是任何值了)作为参数。可以接收 error类型的变量,输出错误信息,并退出程序。
func main() {
test02()
}
func test02(){
err := readConf("config.ini")
if err != nil {
panic(err)//输出错误信息,并退出程序
}
fmt.Println("继续执行....")
}
// 读取配置文件init.conf
//如果传入文件名称不对返回自定义错误信息
func readConf(name string) (err error){
if name == "config.ini" {
//读取...
fmt.Println("读取配置信息...")
return nil
} else {
//返回自定义错误
return errors.New("读取文件错误...")
}
}
正确执行结果
错误执行结果