2016-10-19 35 views
1

go中的許多函數都會返回錯誤以適合界面,但這些錯誤始終爲零。是否應該檢查這些錯誤?在處理所有返回的錯誤時,它是否是慣用的?

一個例子是crypto/sha1 Write() function,它沒有設置err值。因此,代碼並不需要是:

_, err = sha1Hasher.Write(buffer) 
if err != nil { 
    log.Printf("sha1 could not be calculated (%s)", err) 
} 

但僅限於:

sha1Hasher.Write(buffer) 

第二個選項是更短,更清潔,去了很多關於簡單的代碼,但建議來處理所有的錯誤:

但請記住:不管你做什麼,總是檢查你的錯誤!

https://blog.golang.org/errors-are-values

顯然,我們必須處理的任何錯誤;我們不能忽視它們。

https://stackoverflow.com/a/16126516/4944254

這是最好的方式去?

+3

您不需要處理不能發生或無法處理的錯誤。 'digest.Write'方法只返回一個符合'io.Writer'接口的錯誤。您通常不會看到任何人檢查'fmt.Println'中的錯誤。 – JimB

+1

這是一本很好的讀物http://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully –

回答

1

在你描述的情況下,你可能會沒有檢查錯誤就好,與使用fmt.Println時不檢查錯誤一樣。

但是,當您使用fmt.Println時,您知道正在使用哪些具體實現。當你使用Writer接口(其中os.Stdout實現) - 你不能假設如果實現將返回任何錯誤。在那種情況下,恕我直言,你應該經常檢查錯誤。

順便說一句,寫到os.Stdout,其中fmt.Print使用,可能會失敗(可能會取代os.Stdout的值爲其他)。

相關問題