【Go】錯誤處理

來源:互聯網
上載者:User

標籤:作業系統   request   UNC   perm   range   ons   語句   聲明   方式   

·  error類型是一個介面類型,也是一個Go語言的內建類型。在這個介面類型的聲明中只包含了一個方法Error。這個方法不接受任何參數,但是會返回一個string類型的結果。它的作用是返回錯誤資訊的字串表示形象。我們使用error類型的方式通常是,在函式宣告結果清單的最後,聲明一個該類型的結果。同時在調用這個函數之後,先判斷它返回的最後一個結果是否"不為nil"。如果不為nil那麼就進入錯誤處理流程,否則就繼續進行正常的流程。

package mainimport (    "errors"    "fmt")func echo(request string) (response string, err error) {    if request == "" {          //如果request為空白,調用error.New函數為結果賦值,然後忽略後邊操作返回。response返回Null 字元串        err = errors.New("empty content")        return      }    response = fmt.Sprintf("echo: %s", request)     return  //err值為nil}func main() {    for _, req := range []string{"", "hello!"} {        fmt.Printf("request: %s\n", req)        resp, err := echo(req)        if err != nil {            fmt.Printf("error: %s\n", err)            continue        }        fmt.Printf("response: %s\n", resp)    }}

  

 

由於error是一個介面類型,所以即使同為error類型的錯誤值,它們的實際類型也可能不同。怎樣判斷一個錯誤值具體代表的是哪一類錯誤呢?

  1)對於類型在已知範圍內的一系列錯誤值,一般使用類型斷言運算式或類型switch語句來判斷

  2)對於已有相應變數且類型相同的一系列錯誤值,一般直接使用判等操作來判斷

  3)對於沒有響應變數且類型未知的一系列錯誤值,只能使用其錯誤資訊的字串表示形式來做判斷

func underlyingError(err error) error {       //擷取和返回已知作業系統相關錯誤的潛在錯誤值    switch err := err.(type) {    case *os.PathError:        return err.Err  //返回函數參數err的Err欄位    case *os.LinkError:        return err.Err    case *os.SyscallError:        return err.Err    case *exec.Error:        return err.Err    }    return err //直接把函數參數值返回}printError := func(i int, err error) {    if err == nil {        fmt.Println("nil error")        return    }    err = underlyingError(err)    switch err {    case os.ErrClosed:        fmt.Printf("error(closed)[%d]: %s\n", i, err)    case os.ErrInvalid:        fmt.Printf("error(invalid)[%d]: %s\n", i, err)    case os.ErrPermission:        fmt.Printf("error(permission)[%d]: %s\n", i, err)    }}

 

【Go】錯誤處理

相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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