8章エラー処理

ほかの言語からGo言語に移行しようとしている開発者にとって、エラー処理はかなり厄介な存在かもしれません。「例外」に慣れている人の中にはGoのアプローチは「時代錯誤だ」と感じる人もいるでしょう。しかしGoのアプローチも確固たるソフトウェアエンジニアリング的な原則に基づいたものなのです。

この章ではエラー処理について学びます。パニック(panic)とリカバー(recover)についても詳しく説明します。Goではどのようにエラーを処理するのがイディオム的なのか、見ていきましょう。

8.1 エラー処理の基本

5章 関数」で簡単に見ましたが、Goは関数からerror型を戻すことによってエラーを処理します。これは単なる慣習なのですが、誰もが守ることになっているものなので、絶対に破るべきではありません。

  • 関数が期待どおりに実行された場合はerrorにはnilが返される
  • 何かがうまくいかない場合、エラーを表す値が返される
  • 呼び出し側ではerrorの戻り値をnilと比較することでチェックし、そのエラーを処理したり、独自のエラーを返したりする

具体的には次のようなコードになります(ch08/ex0801.gohttps://musha.com/scgo?ex=0801)。

func calcRemainderAndMod(numerator, denominator int) (int, int, error) {
    // 被除数と除数をもらって、商と余り、それにerrorを返す
    if denominator == 0 {
        return 0, 0, errors.New("denominator is 0") // 除数が0
    }

    return numerator / denominator ...

Get 初めてのGo言語 ―他言語プログラマーのためのイディオマティックGo実践ガイド now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.