文章目录
一、error接口:
1. 使用error接口
package main
import (
"fmt"
)
func test(a, b int) (res int, err error) {
err = nil
if b == 0 {
fmt.Println("err=", err) // err= <nil>
} else {
res = a / b
}
return
}
func main() {
res, err := test(10, 0)
if err != nil {
fmt.Println("err = ", err)
} else {
fmt.Println(res) // 0
}
}
二、panic函数:
1. panic函数的使用:
panic函数: 当程序遇到panic函数会自动终止;
package main
import "fmt"
func main() {
fmt.Println("hello...")
fmt.Println("hello...")
fmt.Println("hello...")
panic("hello")
fmt.Println("hello...")
fmt.Println("hello...")
// hello...
// hello...
// hello...
// panic: hello
// goroutine 1 [running]:
// main.main()
// /Users/chengfei/Documents/学习/02_Golang学习/09_异常处理/02_panic函数.go:9 +0x145
// exit status 2
}
三、延时调用defer:
1. defer的使用:
- defer执行顺序:
- 一个函数有多个defer语句, 他们以"后进先出"的顺序执行
func main() {
defer fmt.Println("你好...")
defer fmt.Println("世界...")
defer fmt.Println("hello...")
fmt.Println("world...")
// world...
// hello...
// 世界...
// 你好...
}
2. 在异常中的使用:
即使函数或者某个延迟调用发生了错误, 这些调用依旧会被执行
func test(x int) int {
v := 100 / x
return v
}
func main() {
defer fmt.Println("你好...")
defer fmt.Println("世界...")
defer test(0)
defer fmt.Println("hello...")
defer fmt.Println("world...")
// world...
// hello...
// 世界...
// 你好...
// panic: runtime error: integer divide by zero
}
3. 与匿名函数配合:
func main() {
a, b := 10, 20
defer func() {
fmt.Println("匿名函数: ", a, b)
}()
a = 100
b = 200
println("main函数", a, b)
}
main函数 100 200
匿名函数: 100 200
func main() {
a, b := 10, 20
defer func(a, b int) {
fmt.Println("匿名函数: ", a, b)
}(a, b)
a = 100
b = 200
println("main函数", a, b)
}
// main函数 100 200
// 匿名函数: 10 20
四、recover:
1. recover的使用:
package main
import "fmt"
func testA() {
fmt.Println("testA...")
}
func testB(x int) {
// 设置recover()
// 在defer调用的函数中使用recover()
defer func() {
// 防止程序崩溃
// recover()
if err := recover(); err != nil {
fmt.Println(err)
}
}() // 匿名函数调用
var a [3]int
a[x] = 999
fmt.Println(a)
}
func testC() {
fmt.Println("testC...")
}
func main() {
testA()
testB(3) // err: 下标越界
testC()
// testA...
// runtime error: index out of range [3] with length 3
// testC...
}