Go 語言系列(五):錯誤處理與併發

這是 Go 語言從零到 Web 應用系列的第五篇,也是基礎篇的最後一篇。這篇要學的是 Go 最有特色的兩個主題:錯誤處理和併發。 錯誤處理 Go 的錯誤哲學 Go 沒有 try/catch。它的哲學是:錯誤是正常的程式流程,應該被明確處理,而不是被「拋出」和「捕捉」。 Go 使用多值回傳來傳遞錯誤: result, err := doSomething() if err != nil { // 處理錯誤 return err } // 使用 result 這個模式你在 Go 程式碼中會看到無數次。 error 介面 Go 的 error 是一個簡單的介面: type error interface { Error() string } 任何實作了 Error() string 方法的型別都是 error。 建立錯誤 import ( "errors" "fmt" ) // 方式一:errors.New err := errors.New("something went wrong") // 方式二:fmt.Errorf(可以格式化訊息) name := "config.json" err = fmt.Errorf("file not found: %s", name) 自訂 Error 型別 type ValidationError struct { Field string Message string } func (e *ValidationError) Error() string { return fmt.Sprintf("validation failed on %s: %s", e.Field, e.Message) } func validateAge(age int) error { if age < 0 || age > 150 { return &ValidationError{ Field: "age", Message: "must be between 0 and 150", } } return nil } 錯誤包裝(Error Wrapping) Go 1.13 引入了錯誤包裝機制,讓你可以在傳遞錯誤時加入上下文: ...

2026年2月24日 · 6 min · 1181 words · Jack