golang错误处理(实验楼)
生活随笔
收集整理的這篇文章主要介紹了
golang错误处理(实验楼)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
? Go中有一個名為error的內(nèi)置接口,定義如下:
? type error interface {
Error() string }? Go是使用一個獨(dú)立的·明確的返回值來傳遞錯誤信息的。這與使用異常的 Java 和 Ruby 以及在 C 語言中經(jīng)常見到的超重的單返回值/錯誤值相比,Go 語言的處理方式能清楚的知道哪個函數(shù)返回了錯誤,并能想調(diào)用那些沒有出錯的函數(shù)一樣調(diào)用。 ? 看一段實(shí)驗(yàn)樓的代碼: package mainimport "errors" import "fmt"// 按照慣例,錯誤通常是最后一個返回值并且是 `error` 類 // 型,一個內(nèi)建的接口。 func f1(arg int) (int, error) { if arg == 42 { // `errors.New` 構(gòu)造一個使用給定的錯誤信息的基本 // `error` 值。 return -1, errors.New("can't work with 42") } // 返回錯誤值為 nil 代表沒有錯誤。 return arg + 3, nil } // 通過實(shí)現(xiàn) `Error` 方法來自定義 `error` 類型是可以得。 // 這里使用自定義錯誤類型來表示上面的參數(shù)錯誤。 type argError struct { arg int prob string } func (e *argError) Error() string { return fmt.Sprintf("%d - %s", e.arg, e.prob) } func f2(arg int) (int, error) { if arg == 42 { // 在這個例子中,我們使用 `&argError` 語法來建立一個 // 新的結(jié)構(gòu)體,并提供了 `arg` 和 `prob` 這個兩個字段 // 的值。 return -1, &argError{arg, "can't work with it"} } return arg + 3, nil } func main() { // 下面的兩個循環(huán)測試了各個返回錯誤的函數(shù)。注意在 `if` // 行內(nèi)的錯誤檢查代碼,在 Go 中是一個普遍的用法。 for _, i := range []int{7, 42} { if r, e := f1(i); e != nil { fmt.Println("f1 failed:", e) } else { fmt.Println("f1 worked:", r) } } for _, i := range []int{7, 42} { if r, e := f2(i); e != nil { fmt.Println("f2 failed:", e) } else { fmt.Println("f2 worked:", r) } } // 你如果想在程序中使用一個自定義錯誤類型中的數(shù)據(jù),你 // 需要通過類型斷言來得到這個錯誤類型的實(shí)例。 _, e := f2(42) if ae, ok := e.(*argError); ok { fmt.Println(ae.arg) fmt.Println(ae.prob) } }
運(yùn)行程序
$ go run errors.go f1 worked: 10 f1 failed: can't work with 42 f2 worked: 10 f2 failed: 42 - can't work with it 42 can't work with it轉(zhuǎn)載于:https://www.cnblogs.com/Ellon-Daris/p/5505289.html
總結(jié)
以上是生活随笔為你收集整理的golang错误处理(实验楼)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QEMU-KVM中的多线程压缩迁移技术
- 下一篇: 6-4-1:STL之list——list