errors
Go 語言通過 error 接口實現(xiàn)錯誤處理的標準模式,通過使用函數(shù)返回值列表中的最后一個值返回錯誤信息,將錯誤的處理交由程序員主動進行處理??梢酝ㄟ^ errors 包的 New 方法創(chuàng)建或者通過 fmt.Errorf 方法創(chuàng)建。
package main
import (
"errors"
"fmt"
)
// 返回值 怎么定義錯誤類型
// 怎么創(chuàng)建錯誤類型的值,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 關鍵字用戶聲明函數(shù),不論函數(shù)是否發(fā)生錯誤都在最后執(zhí)行(return 之前),若使用 defer 聲明多個函數(shù),則按照聲明的順序,先聲明后執(zhí)行(堆)。
常用來做資源釋放,記錄日志等工作
package main
import "fmt"
func main() {
// defer 延遲執(zhí)行,最后執(zhí)行
// 多個defer,和棧差不多,先進后出
defer func() {
fmt.Println("defer01")
}()
defer func() {
fmt.Println("defer02")
}()
fmt.Println("main over")
}
go 語言提供 panic 和 recover 函數(shù)用于處理運行時錯誤,當調用 panic 拋出錯誤,中斷原有的控制流程,常用于不可修復性錯誤。recover 函數(shù)用于終止錯誤處理流程,僅在 defer語句的函數(shù)中有效,用于截取錯誤處理流程,recover 只能捕獲到最后一個錯誤。
go 語言提供 panic 和 recover 函數(shù)用于處理運行時錯誤,當調用 panic 拋出錯誤,中斷原有的控制流程,常用于不可修復性錯誤。recover 函數(shù)用于終止錯誤處理流程,僅在 defer語句的函數(shù)中有效,用于截取錯誤處理流程,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")
}