Go エラーハンドリング|error処理の基本と実装方法

プログラム

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つを理解しましょう。

コメント

タイトルとURLをコピーしました