目录
//错误处理
package main
import("fmt")
func test() {
num1 := 10
num2 := 0
res :=num1/num2//程序存在问题,运行后崩溃
fmt.Println("res=",res)
}
func main() {
test()
fmt.Println("main()下面的代码")
}
-
在默认情况下,当发生错误后(panic) ,程序就会退出(崩溃.)
-
如果我们希望:当发生错误后,可以捕获到错误,并进行处理,保证程序可以继续执行。还可以在捕获到错误后,给出一个提示
使用defer+recover 来处理错误
package main
import(
"fmt"
"time"
)
func test() {
defer func () {
err := recover()//内置函数,可以捕获到异常
if err != nil{//捕获到错误
fmt.Println("err=",err)
}
}()
num1 := 10
num2 := 0
res :=num1/num2//程序存在问题,运行后崩溃
fmt.Println("res=",res)
}
func main() {
test()
for{
fmt.Println("main()下面的代码")
time.Sleep(time.Second)
}
}//CTRL+C强制终止程序
错误处理的好处
进行错误处理后,程序不会轻易崩溃,如果加入预警代码,就可以让程序更加地具有鲁棒性。
package main
import(
"fmt"
"time"
)
func test() {
defer func () {
err := recover()
if err != nil{
fmt.Println("err=",err)
fmt.Println("请联系2963703604@qq.com反馈")
}
}()
num1 := 10
num2 := 0
res :=num1/num2//程序存在问题,运行后崩溃
fmt.Println("res=",res)
}
func main() {
test()
for{
fmt.Println("出现错误...请按下CTRL+C终止程序!")
time.Sleep(time.Second)
}
}
自定义错误
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 test2() {
err := readConf("config2,ini")
if err != nil{
//如果读取文件发送错误,就输出这个错误并终止程序
panic(err)
}
fmt.Println("test2()继续执行...")
}
func main() {
test2()
fmt.Println("出错啦!")
}