1)Go语言煮酒简洁优雅,所以,Go语言不支持传统的 try catch finally 这种处理。
2)Go中引入的处理方式为:defer,panic,recover。
3)这几个异常的使用场景可以这么简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。
package main import ( "fmt" ) //这种情况下抛出异常后程序依然继续执行 func test() { //使用defer+recover 来捕获和处理异常 defer func() { err := recover() //recover()内置函数,可以捕获到异常 if err != nil { // 说明捕获到错误 fmt.Println("err = ", err) //这里就可以将错误信息发送给管理员或记录在系统日志等操作 fmt.Println("发送邮件给admin@sohu.com") } }() num1 := 10 num2 := 0 res := num1 / num2 fmt.Println("res=", res) } func main() { //测试 test() fmt.Println("main() 下面的代码...") }
Go程序中,也支持自定义错误,使用 errors.Now 和 panic 内置函数。
1)errors.New("错误说明"),会返回一个error类型的值,表示一个错误
2)panic内置函数,接收一个interface{}类型的值作为参数,可以接收error类型的变量,输出错误信息,并退出程序。
package main import ( "errors" "fmt" ) //这种操作抛出异常后不会继续执行后续代码 //函数去读取配置文件的信息 //如果文件名传入不正确,我们就返回一个自定义的错误 func readConf(name string) (err error) { if name == "config.ini" { //读取... return nil } else { //返回一个自定义错误 return errors.New("读取文件错误...") } } func test02() { err := readConf("config1.ini") if err != nil { //如果读取文件发送错误,就输出这个错误,并终止程序 panic(err) } fmt.Println("test02()继续执行....") } func main() { //测试 test02() fmt.Println("main() 下面的代码...") }
原文:https://www.cnblogs.com/ckfuture/p/14803757.html