golang错误处理机制
一、基本说明
- Go语言追求简洁优雅,所以,Go语言不支持传统的try...catch...finally这种处理。
- Go中引入的处理方式为:defer,panic,recover
- 这个异常的使用场景可以这么简单的描述:Go中可以抛出一个panic异常,然后在defer中通过recover捕获这个异常。然后正常处理
二、案例
package main
import (
"fmt"
)1. 1.
func test() {
defer func() {
if err := recover(); err != nil { // recover()内置函数,可以捕获异常
fmt.Println("err=", err)
}
}()
num1 := 10
num2 := 0
res := num1 / num2
fmt.Println("res=", res)
}
func main() {
test()
fmt.Println("main下面的代码")
}
输出结果:
err= runtime error: integer divide by zero
main下面的代码
三、自定义错误
Go程序中,也支持自定义错误,使用errors.New和panic内置函数
- errors.New("错误说明"),会返回一个error值,使用error类型的值,表示一个错误
- panic内置函数,接收一个interface{}类型的值(也就是任意值)作为函数,可以接收error类型的变量,输出错误信息,并退出程序
案例:
package main
import (
"errors"
"fmt"
)
func test(code string) (err error) {
if code != "200" {
err = errors.New("接口调用失败")
}
return
}
func main() {
err := test("100")
if err != nil {
// 如果接口调用失败,就会输出这个错误,并终止程序
panic(err)
}
fmt.Println("main下面的代码")
}
输出结果:
panic: 接口调用失败
goroutine 1 [running]:
main.main()
/box/main.go:19 +0xe6
Exited with error status 2