错误处理
- 错误处理案例
-
- 错误处理基本说明
- 使用defer+recover来处理错误
- 错误处理的好处
- 自定义错误
-
- 自定义错误的介绍
- 案例说明
错误处理案例
看下面代码:
package main
import(
"fmt"
)
func test(){
num1 := 10
num2 := 0
res := num1 / num2
fmt.Println("res =",res)
}
func main(){
test()
fmt.Println("main()下面的代码")
}
运行结果:
说明:
- 在默认情况下,当发生错误后(panic),程序就会退出(崩溃).
- 如果我们希望当程序发生错误后,可以捕获到错误,并进行处理,保证程序可以继续执行,还可以在捕获到错误后,给管理员一个提示(邮件,短信…)。这里就需要引出错误处理机制。
错误处理基本说明
- Go语言追求简洁优雅,所以,Go语言不支持传统的try…catch…finally这种处理
- Go中引入的处理方式为:defer,panic,recover
- 异常使用场景简单描述:Go中可以抛出一个panic异常,然后再defer中通过recover捕获这个异常,然后正常处理。
使用defer+recover来处理错误
代码:
package main
import(
"fmt"
//"errors"
)
func test(){
//使用defer + recover来捕获和处理异常
defer func(){
//recover()内置函数,可以捕获到异常
err := recover()
if err != nil{ //说明捕获到错误与
fmt.Println("err =",err)
}
}()
num1 := 10
num2 := 0
res := num1 / num2
fmt.Println("res =",res)
}
func main(){
test()
fmt.Println("main()下面的代码")
}
运行结果:
错误处理的好处
进行错误处理后,程序不会轻易挂掉,如果加入预警代码,就可以让程序更加健壮。
自定义错误
自定义错误的介绍
Go程序中,也支持自定义错误,使用errors.New和panic内置函数。
- errors.New("错误说明”),会返回一个error类型的值,表示一个错误。
- panic内置函数,接收一个interface{}类型的值(也就是任何值)作为参数。可以接收error类型的变量,输出错误信息,并退出程序。
案例说明
package main
import(
"fmt"
"errors"
)
//函数读取配置文件信息,如果文件名传入不正确,就返回一个自定义错误
func readConf(name string)(err error){
if name == "config.ini"{
//读取文件
return nil
}else{
//返回一个自定义错误
return errors.New("读取文件错误..")
}
}
func test(){
err := readConf("config.ini")
if err != nil{
//如果读取文件发送错误,就输出这个错误,并终止程序
panic(err)
}
fmt.Println("test()继续执行...")
}
func main(){
test()
fmt.Println("main()下面的代码")
}
运行结果:
错误输出: