學習軌道
/
Go
Go
/
練習
/
錯誤處理
錯誤處理

錯誤處理

中等

說明

實作各種錯誤處理與資源管理方式。

程式設計的一個重點,就是即使發生錯誤,也要懂得如何處理錯誤並關閉資源。

這個練習要求你處理各種錯誤。由於錯誤處理與程式語言息息相關,你需要參考你正在學習的語言的測試,才能知道確切的要求。

實作

如果你剛接觸 Go 的錯誤或 panic,建議先閱讀這方面的文件,先了解一下背景脈絡。

在這個練習中,你需要定義一個函式Use(opener ResourceOpener, input string) error,它會開啟資源、對取得的資源呼叫Frob(input),然後關閉該資源(無論發生什麼情況)。 你的函式應該妥善處理錯誤與 panic。

ResourceOpener opener是一個函式,你可以直接呼叫opener()來嘗試「開啟」資源。 它會以 Go 的慣用風格回傳一個Resource和一個錯誤值:

請參閱 common.go 檔案,了解Resource、ResourceOpener、FrobError和TransientError的定義。 你的解答要定義在與 common.go 和 error_handling_test.go 相同的套件裡:「erratum」。 這樣一來,你的解答就能使用這些型別。

你的Use函式中有幾個地方可能會發生錯誤:

  • 呼叫當作第一個參數傳入 Use 的ResourceOpener函式時,它可能會以TransientError型別的錯誤失敗,若是如此,請持續嘗試開啟資源。 如果是其他種類的錯誤,就把它從你的Use函式回傳。

  • 對ResourceOpener函式回傳的Resource呼叫Frob函式時,它可能會panic,並拋出FrobError(或其他型別的錯誤)。 如果確實是FrobError,你就必須呼叫該 Resource 的Defrob函式,並以 panic 的FrobError的.defrobTag變數作為Defrob函式的輸入。 無論如何,Use都應該回傳該錯誤。

  • 另外請注意:如果Resource成功開啟,請務必確保無論如何都恰好呼叫它的Close函式一次(即使已經發生錯誤)。

測試特定錯誤型別可以透過型別斷言來進行。 你可能還需要看看具名回傳值,這是從 panic 復原時回傳錯誤資訊的實用做法。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Go Exercism

準備好開始 錯誤處理 了嗎?

註冊 Exercism,透過 34 個概念165 個練習 和真人引導來學習並精通 Go,全部免費。