2017-06-05 48 views
0

我目前正在構建一個用於讀取/寫入/移動文件的小型庫。 雖然這樣做我遇到的錯誤處理,這使我想到的問題:如何在庫中拋出錯誤

我應該拋出一個錯誤的lib內,並有用戶的整個應用程序崩潰,或者返還用戶處理錯誤消息?

我想知道哪種情況最好,爲什麼。

+0

就像一切都「依賴」。如果你自己扔它應該是一個例外,可以被捕獲,而不是一個錯誤。無論哪種方式,行爲都需要記錄。可捕捉的異常與返回的錯誤取決於語言,其他庫,觀衆。 –

+0

我添加了我使用的語言作爲標籤,但是由於Golang非常喜歡'如果err!= nil'我想可能只是返回'error.New()'? – duck

+0

你從不在圖書館恐慌。 – zerkms

回答

1

我建議您閱讀The Go Blog文章Error Handling and GoEffective 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包裝標準庫,其中內部的恐慌被用來清理複雜的嵌套錯誤的改編處理程序處理。