返回並處理錯誤
注意: 本文是系列教學的一部分,該系列始於 建立 Go 模組。
處理錯誤是可靠程式碼的重要組成部分。在本節中,你將加入一些程式碼以從 greetings 模組返回錯誤,然後在呼叫者中處理它。
步驟
1. 修改 greetings/greetings.go 以返回錯誤
在 greetings/greetings.go 中,加入下面高亮顯示的程式碼。
如果你不知道要問候誰,那麼返回問候語就沒有意義。如果名字為空,則向呼叫者返回錯誤。將以下程式碼複製到 greetings.go 並儲存檔案。
在這段程式碼中,你:
- 更改函數,使其返回兩個值:一個
string和一個error。呼叫者將檢查第二個值,看看是否發生了錯誤。(任何 Go 函數都可以返回多個值。更多資訊,請參閱 Effective Go。) - 匯入 Go 標準函式庫的
errors套件,以便你可以使用其errors.New函數。 - 加入一個
if語句來檢查無效請求(名字應為空字串),如果請求無效,則返回錯誤。errors.New函數返回一個包含你訊息的error。 - 在成功返回時加入
nil(表示無錯誤)作為第二個值。這樣,呼叫者可以看到函數成功。
2. 在 hello/hello.go 中處理錯誤
在你的 hello/hello.go 檔案中,處理現在由 Hello 函數返回的錯誤以及非錯誤值。
將以下程式碼貼上到 hello.go。
在這段程式碼中,你:
- 設定
log套件 在其日誌訊息的開頭列印命令名稱("greetings: "),不帶時間戳或來源檔案資訊。 - 分配
Hello的所有返回值,包括error,到變數。 - 將
Hello的參數從 Gladys 的名字更改為空字串,以便你可以嘗試錯誤處理程式碼。 - 尋找非 nil 的
error值。在這種情況下,繼續執行沒有意義。 - 使用標準函式庫的
log套件中的函數來輸出錯誤資訊。如果你收到錯誤,則使用log套件的Fatal函數 列印錯誤並停止程式。
3. 執行 hello.go 以確認程式碼正常工作
在 hello 目錄的命令列中,執行 hello.go 以確認程式碼正常工作。
現在你傳遞了一個空名字,你將得到一個錯誤。
結論
這就是 Go 中常見的錯誤處理:將錯誤作為值返回,以便呼叫者可以檢查它。
接下來,你將使用 Go 切片返回隨機選擇的問候語。