0
我目前正在構建一個用於讀取/寫入/移動文件的小型庫。 雖然這樣做我遇到的錯誤處理,這使我想到的問題:如何在庫中拋出錯誤
我應該拋出一個錯誤的lib內,並有用戶的整個應用程序崩潰,或者返還用戶處理錯誤消息?
我想知道哪種情況最好,爲什麼。
我目前正在構建一個用於讀取/寫入/移動文件的小型庫。 雖然這樣做我遇到的錯誤處理,這使我想到的問題:如何在庫中拋出錯誤
我應該拋出一個錯誤的lib內,並有用戶的整個應用程序崩潰,或者返還用戶處理錯誤消息?
我想知道哪種情況最好,爲什麼。
我建議您閱讀The Go Blog文章Error Handling and Go和Effective Go,以瞭解Go的錯誤類型。
一般而言,恐慌在庫/包中使用是可以的,但除非存在致命錯誤,否則它們不應傳播到包外。換句話說,開發人員應該永遠不必編寫那些預計庫會出現混亂的代碼。
如果管理錯誤傳播很枯燥,您可以在內部使用panics。在這種情況下,你可以用延遲包裝你的公共職能/恢復其傳遞錯誤
func Function() (err error) {
defer func() {
if r := recover(); r != nil {
err = r.(error)
}
}()
// Do stuff
panic(errors.New("Error Message"))
}
此樣本從json
包裝標準庫,其中內部的恐慌被用來清理複雜的嵌套錯誤的改編處理程序處理。
就像一切都「依賴」。如果你自己扔它應該是一個例外,可以被捕獲,而不是一個錯誤。無論哪種方式,行爲都需要記錄。可捕捉的異常與返回的錯誤取決於語言,其他庫,觀衆。 –
我添加了我使用的語言作爲標籤,但是由於Golang非常喜歡'如果err!= nil'我想可能只是返回'error.New()'? – duck
你從不在圖書館恐慌。 – zerkms