Go言語では、エラー処理に error 型 を使います。
JavaやPHPのように例外処理を中心にするのではなく、戻り値としてエラーを受け取り、すぐ確認する のが基本です。
Goのerror処理の基本
result, err := doSomething()
if err != nil {
fmt.Println("エラー:", err)
return
}
fmt.Println(result)
Goではこの形がとても重要です。
if err != nil {
// エラー時の処理
}
errorを返す関数の作り方
package main
import (
"errors"
"fmt"
)
func divide(a int, b int) (int, error) {
if b == 0 {
return 0, errors.New("0で割ることはできません")
}
return a / b, nil
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("エラー:", err)
return
}
fmt.Println("結果:", result)
}
fmt.Errorfで詳しいエラーを作る
package main
import (
"fmt"
)
func findUser(id int) error {
if id <= 0 {
return fmt.Errorf("不正なユーザーIDです: %d", id)
}
return nil
}
func main() {
err := findUser(0)
if err != nil {
fmt.Println(err)
}
}
実務でよく使う書き方
file, err := os.Open("sample.txt")
if err != nil {
return err
}
defer file.Close()
ポイントは、エラーが起きたら早めにreturnすることです。
これを 早期リターン といいます。
Web APIでのエラー処理例
func handler(w http.ResponseWriter, r *http.Request) {
user, err := getUser()
if err != nil {
http.Error(w, "ユーザー取得に失敗しました", http.StatusInternalServerError)
return
}
json.NewEncoder(w).Encode(user)
}
Web開発では、エラー内容に応じてHTTPステータスコードを返します。
まとめ
Goのエラーハンドリングは、次の形を覚えればOKです。
if err != nil {
return err
}
初心者はまず、
「関数は値とerrorを返す」
「errがnilでなければエラー」
この2つを理解しましょう。


コメント