Go 語言如何實現error的優雅處理
阿新 • • 發佈:2019-02-16
我撰寫本文,是為了迴應別處一個文章的說法。具體來說,就是錯誤處理的方式太“不優雅”。
go語言的錯誤處理方式,往往被新接觸go語言的新人所詬病。注意哦,我說的可不是“異常處理”。Go語言中是沒有異常的,儘管你會說Go語言不是使用panic和recover來處理異常的麼。但是,我必須明確指出,我是反對你這種說法的。經常使用這種說法,其實是反設計模式的。你的程式中出現某種錯誤時,Go只是使用一種類似這種處理方式去處理罷了。
Go的作者們想了很多種處理error的方案。我想他們肯定是權衡再三,從中選取了一個相對最好的解決方案,使其簡單而又優雅。
我們知道,GO是可以返回多值結果的。按照慣例,如果有錯誤發生,函式將返回一個錯誤,並且該錯誤是作為最後一個返回值返回的。
func ETPhoneHome(msg string) (string, error) {
// implementation
}
一個error
型別如下:
type error interface {
Error() string
}
這意味著,任何實現這個將string作為返回值的Error()方法的型別,都實現了error
介面。string返回值可以描述錯誤發生的詳情。如果覺得對此有所疑惑的話,可以回顧下Go介面的相關內容
在很多Go的程式碼中,你會見到類似如下的程式碼段:
response, err := ETPhoneHome("I can't fly this bike forever!" )
if err != nil {
// handle the error, often:
return err
}
// do something with response