Golang學習 - errors 包


------------------------------------------------------------   Go 語言使用 error 類型來返回函數執行過程中遇到的錯誤,如果返回的 error 值為 nil,則表示未遇到錯誤,否則 error 會返回一個字符串,用於說明遇到了什么錯誤。 其實 error 只是一個接口,定義如下: ------------------------------ type error interface { Error() string } ------------------------------   你可以用任何類型去實現它(只要添加一個 Error() 方法即可),也就是說,error 可以是任何類型,這意味着,函數返回的 error 值實際可以包含任意信息,不一定是字符串(當然字符串是必須的)。   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) } } } ------------------------------------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM