使用golang errors包自訂錯誤異常

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

發現Golang很多開源的package都是使用Error來定義錯誤異常,其實我自己更加的習慣利用返回的值進行判斷。 雖然這麼說,但Golang的error定義還是有意思的,合理就返回nil,不合理就返回Error的草錯誤。  

該文章寫的有些亂,歡迎來噴 ! 另外文章後續不斷更新中,請到原文地址查看更新.

http://xiaorui.cc/?p=2963


下面說說Golang的自訂錯誤的用法。在go裡定義錯誤異常的方式有這麼兩種,但都需要你的傳回值是error類型的。

Pythonfunc Control() error { //xxxx}
1234  func Control() error {      //xxxx}

第一種方式是使用golang標準庫包errors 來定義錯誤。使用方法很是簡單,只需要 return errors.New(“string”)  。 這樣就是一個最簡單的錯誤返回。 


第二種方式是借用struct結構體,建立一個struct的Error()方法,注意這個方法名是Error,不然會出現下面的Bug, 找不到Error方法。


Python./er.go:25: cannot use equalError literal (type equalError) as type error in return argument: equalError does not implement error (missing Error method)
123  ./er.go:25: cannot use equalError literal (type equalError) as type error in return argument:    equalError does not implement error (missing Error method)


下面是一個比較完整的Error的使用方法。不僅有errors,還有struct Error()方式. 

Python#http://xiaorui.ccpackage mainimport ("errors""fmt")type equalError struct {Num int}//方法名字是Error()func (e equalError) Error() string {return fmt.Sprintf("你現在是數字是 %d ,還是超了55", e.Num)}func Equal(n int) (int, error) {if n > 55 {return -1, errors.New("超過了55") //產生一個簡單的 error 類型}return n, nil}func DiyEqual(n int) (int, error) {if n > 55 {return -1, equalError{Num: n} // 會調用equalError的Error方法}return n, nil}func main() {//使用errors.New產生error對象if result, err := Equal(100); err != nil {fmt.Println("錯誤:", err)} else {fmt.Println("結果:", result)}//不適用erros,自訂錯誤方式.if result, err := DiyEqual(100); err != nil {fmt.Println("錯誤:", err)} else {fmt.Println("結果:", result)}}
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748  #http://xiaorui.ccpackage main import ("errors""fmt") type equalError struct {Num int} //方法名字是Error()func (e equalError) Error() string {return fmt.Sprintf("你現在是數字是 %d ,還是超了55", e.Num)} func Equal(n int) (int, error) {if n > 55 {return -1, errors.New("超過了55") //產生一個簡單的 error 類型}return n, nil} func DiyEqual(n int) (int, error) {if n > 55 {return -1, equalError{Num: n} // 會調用equalError的Error方法}return n, nil} func main() {//使用errors.New產生error對象if result, err := Equal(100); err != nil {fmt.Println("錯誤:", err)} else {fmt.Println("結果:", result)} //不適用erros,自訂錯誤方式.if result, err := DiyEqual(100); err != nil {fmt.Println("錯誤:", err)} else {fmt.Println("結果:", result)} }

上面這段golang errors代碼執行後的結果是:

Python[ `go run er.go` | done: 659.182168ms ] 錯誤: 超過了55 錯誤: 你現在是數字是 100 ,還是超了55
1234  [ `go run er.go` | done: 659.182168ms ]  錯誤: 超過了55  錯誤: 你現在是數字是 100 ,還是超了55
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.