errors
Go 语言通过 error 接口实现错误处理的标准模式,通过使用函数返回值列表中的最后一个值返回错误信息,将错误的处理交由程序员主动进行处理。可以通过 errors 包的 New 方法创建或者通过 fmt.Errorf 方法创建。
package main
import (
"errors"
"fmt"
)
// 返回值 怎么定义错误类型
// 怎么创建错误类型的值,errors.New() fmt.Errorf()
// 无错误 nil,
func division(a, b int) (int, error) {
if b == 0 {
return -1, errors.New("division by zero")
}
return a / b, nil
}
func main() {
fmt.Println(division(1, 3))
if v, err := division(1, 0); err == nil {
fmt.Println(v)
} else {
fmt.Println(err)
}
e := fmt.Errorf("Error: %s", "division by zero")
fmt.Printf("%T,%v\n", e, e)
}
defer
defer 关键字用户声明函数,不论函数是否发生错误都在最后执行(return 之前),若使用 defer 声明多个函数,则按照声明的顺序,先声明后执行(堆)。
常用来做资源释放,记录日志等工作
package main
import "fmt"
func main() {
// defer 延迟执行,最后执行
// 多个defer,和栈差不多,先进后出
defer func() {
fmt.Println("defer01")
}()
defer func() {
fmt.Println("defer02")
}()
fmt.Println("main over")
}
go 语言提供 panic 和 recover 函数用于处理运行时错误,当调用 panic 抛出错误,中断原有的控制流程,常用于不可修复性错误。recover 函数用于终止错误处理流程,仅在 defer语句的函数中有效,用于截取错误处理流程,recover 只能捕获到最后一个错误。
go 语言提供 panic 和 recover 函数用于处理运行时错误,当调用 panic 抛出错误,中断原有的控制流程,常用于不可修复性错误。recover 函数用于终止错误处理流程,仅在 defer语句的函数中有效,用于截取错误处理流程,recover 只能捕获到最后一个错误。
panic抛出异常并退出
package main
import "fmt"
func main() {
fmt.Println("main start")
panic("errors")
fmt.Println("main end")
}
recover 对错误进行恢复处理
package main
import (
"fmt"
)
func main() {
defer func() {
if err := recover(); err != nil {
fmt.Println(err)
}
}()
fmt.Println("main start")
panic("errors panic recover")
fmt.Println("main end")
}