Go入門28:錯誤處理之 error

來源:互聯網
上載者:User

Golang中引入error介面類型作為錯誤處理的標準模式,如果函數要返回錯誤,則傳回值類型列表中肯定包含error。error處理過程類似於C語言中的錯誤碼,可逐層返回,直到被處理。

error基本用法

error 類型實際上是抽象了 Error() 方法的 error介面,Golang使用該介面進行標準的錯誤處理。

error對應原始碼如下:

type error interface {

    Error() string

}

這個設計也正好體現了Go哲學中的“正交”理念:error context與error類型的分離。無論error context是int、float還是string或是其他,統統用error作為傳回值類型即可。

一般情況下,如果函數需要返回錯誤,就將 error 作為多個傳回值中的最後一個(但這並非是強制要求)。

我們來用一個開方函數簡單示範下 Go 語言中 error 的用法:

func Sqrt(f float64) (float64, error) {

    if f < 0 {

        return -1, errors.New("math: square root of negative number")

    }

    return math.Sqrt(f) , nil

}

func main(){

      result, err:= Sqrt(-13)

      if err != nil  {

        fmt.Println(err)

      } else {

        fmt.Println(result)

      }

}

以上是 error 的使用方法:使用errors.New 可返回一個錯誤資訊。與其他語言的異常相比,Golang 的方法相對更加容易、直觀。

error進階用法

除了上面的errors.New 用法之外,我們也可以實現error介面,自己實現Error() 方法,來達到自訂參數的錯誤輸出。

type dualError struct {

    Num    float64

    problem string

}

func (e dualError) Error() string {

    return fmt.Sprintf("Wrong!!!,because \"%f\" is a negative number",e.Num)

}

func Sqrt(f float64) (float64, error) {

    if f < 0 {

        return -1, dualError{Num:f}

    }

    return math.Sqrt(f) , nil

}

func main(){

      result, err:= Sqrt(-13)

      if err != nil  {

        fmt.Println(err)

      }else{

        fmt.Println(result)

      }

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.