Golang 中錯誤與異常需要重新認識

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

如何進行錯誤處理,這是一個Go程式員之間,特別是一些新的Go程式員,會經常討論的問題.討論到最後往往由於以下代碼的多次出現而變成了抱怨.

if err != nil {    return err}

我們最近掃描了我們能找到的開源項目,這段代碼只在一頁或者兩頁中出現了一次,是不是比你想象的少很多.然而,必須到處寫 if err != nuil的感覺依然存在 , 那一定是哪裡出了問題,而且明顯問題出在Go自己身上.

不幸的是,這是一個誤解,而且很容易糾正.或許一個新的Go程式員想問 “怎麼會只有一個錯誤處理?”,那麼學習這種模式,保持它.在其它語言中可以使用try-catch或者其他類似機制去處理錯誤.因此程式員認為,當我需要在其他語言中使用try-catch的時候,我只需要在Go寫if err != nil,隨著時間的推移Go代碼裡會出現很多這樣的程式碼片段,結果感覺很笨拙.

不管這個解釋是否符合,很顯然這些Go程式員忘記了一個關於錯誤的基本觀點:錯誤也是值.

值可以被編程,因此錯誤也是值,錯誤也可以被編程

Values can be programmed, and since errors are values, errors can be programmed.

當然一個常用的涉及到錯誤值的語句是測試它是不是nil , 但是也有無數的其他事情可以用錯誤值來做.使用一些其他事情可以讓你更好的編程,可以很大程度排除使用if語句檢查錯誤的固定模式.

這是一個簡單的樣本,來自bufio 包的Scanner類型.它的 Scan方法執行底層的I/O操作,顯然它可能引起一個錯誤.然而Scan方法並不會暴露錯誤.他返回一個布爾值,通過在Scan運行之後執行的另一個方法來報告是否發生了錯誤.調用代碼如下:

聯繫我們

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