Golang學習 - errors 包
--------------------
Go 語言使用 error 類型來傳回函數執行過程中遇到的錯誤,如果傳回的 error 值為 nil,則表示未遇到錯誤,否則 error 會傳回一個字元串,用于說明遇到了什麼錯誤。其實 error 隻是一個接口,定義如下:
type error interface {
Error() string
}
你可以用任何類型去實作它(隻要添加一個 Error() 方法即可),也就是說,error 可以是任何類型,這意味着,函數 Error 傳回的 string 值實際可以包含任意資訊,不一定隻是字元串(當然字元串是必須的)。
error 也不一定表示一個錯誤,它可以表示任何資訊,比如 io 包中就用 error 類型的 io.EOF 表示資料讀取結束,而不是遇到了什麼錯誤。再比如 path/filepath 包中用 error 類型的filepath.SkipDir表示跳過目前目錄,繼續周遊下一個目錄,而不是遇到了什麼錯誤。
errors 包實作了一個最簡單的 error 類型,隻包含一個字元串,它可以記錄大多數情況下遇到的錯誤資訊。errors 包的用法也很簡單,隻有一個 New 函數,用于生成一個最簡單的 error 對象:
// 将字元串 text 包裝成一個 error 對象傳回
func New(text string) error
--------------------
// 示例
func SomeFunc() error {
if 遇到錯誤 {
return errors.New("遇到了某某錯誤")
}
return nil
}
如果你的程式需要記錄更多的錯誤資訊,比如時間、數值等資訊,可以聲明一個自定義的 error 類型。
--------------------
// 示例
package main
import (
"fmt"
"time"
)
type myError struct {
err string
time time.Time
count int
}
func (m *myError) Error() string {
return fmt.Sprintf("%s %d 次。時間:%v", m.err, m.count, m.time)
}
func newErr(s string, i int) *myError {
return &myError{
err: s,
time: time.Now(),
count: i,
}
}
var count int
func SomeFunc() error {
if true {
count++
return newErr("遇到某某情況", count)
}
return nil
}
func main() {
for i := 0; i < 5; i++ {
if err := SomeFunc(); err != nil {
fmt.Println(err)
}
}
}
轉載于:https://blog.51cto.com/pkbai/1876391