カテゴリ: Go言語 更新日: 2026/01/18

Go言語のpanicとrecoverの活用法!テストでバグを安全に再現する方法

Go言語のpanicをテストで再現する例とrecoverの活用法
Go言語のpanicをテストで再現する例とrecoverの活用法

先生と生徒の会話形式で理解しよう

生徒

「Go言語でプログラムが急に止まることがあります。これってどうやってテストできますか?」

先生

「それはGo言語のpanicという機能によるものです。テストでもpanicを再現して、原因を確認することができます。」

生徒

「panicって何ですか?」

先生

「panicはプログラムの異常を知らせる仕組みです。例えばゼロで割ろうとしたときや、想定外の値が渡ったときに発生します。」

生徒

「panicを止める方法もありますか?」

先生

「はい、recoverという関数を使うと、panicで止まるのを防ぎ、安全に処理を続けることができます。」

1. panicとは?

1. panicとは?
1. panicとは?

Go言語のpanicは、プログラムの実行を中断して異常を通知する仕組みです。例えば、ゼロで割ったり、配列の範囲外にアクセスした場合にpanicが発生します。panicが起きると、その関数は終了し、呼び出し元の関数にもpanicが伝播します。

2. recoverとは?

2. recoverとは?
2. recoverとは?

recoverは、panicを回復するための関数です。recoverを使うと、panicでプログラムが止まるのを防ぎ、エラー処理やログ出力を行うことができます。recoverは通常、deferと組み合わせて使います。deferは関数終了時に実行される処理です。

3. panicをテストで再現する例

3. panicをテストで再現する例
3. panicをテストで再現する例

テストでpanicを再現する場合、testingパッケージとdefer、recoverを使います。以下は簡単な例です。


package main

import (
    "testing"
)

func Divide(a, b int) int {
    if b == 0 {
        panic("ゼロで割ろうとしました")
    }
    return a / b
}

func TestDivide_Panic(t *testing.T) {
    defer func() {
        if r := recover(); r != nil {
            t.Log("panicを検知しました:", r)
        }
    }()
    Divide(10, 0)
}

この例では、ゼロで割る操作を行い、panicを発生させています。deferとrecoverでpanicを捕まえ、テストが異常終了しないようにしています。

Go言語を基礎からスッキリ学びたい人や、 文法だけでなく「実用的な使い方」まで押さえたい人には、 定番の入門書がこちらです。

基礎からわかるGo言語をAmazonで見る

※ Amazon広告リンク

4. recoverを活用して安全に処理を続ける

4. recoverを活用して安全に処理を続ける
4. recoverを活用して安全に処理を続ける

recoverを使うことで、panicを捕まえてエラーメッセージを記録したり、代替処理を行ったりできます。例えば、次のように書くことができます。


func SafeDivide(a, b int) (result int, err error) {
    defer func() {
        if r := recover(); r != nil {
            err = fmt.Errorf("panic発生: %v", r)
        }
    }()
    result = Divide(a, b)
    return result, nil
}

これにより、Divide関数でpanicが発生しても、SafeDivide関数内でエラーとして扱うことができ、プログラムを安全に続行できます。

5. テストでのpanic確認のポイント

5. テストでのpanic確認のポイント
5. テストでのpanic確認のポイント

panicをテストで扱うときのポイントは次の通りです。

  • 必ずdeferとrecoverでpanicを捕まえる
  • panicが発生する条件を明確にする
  • テスト結果にpanicの内容をログとして残す

こうすることで、テストが途中で止まることなく、どの条件でpanicが発生するかを確認できます。

6. 初心者におすすめの練習方法

6. 初心者におすすめの練習方法
6. 初心者におすすめの練習方法

最初は簡単な関数でpanicを発生させ、recoverで回復する練習をしましょう。例えば、配列の範囲外アクセスやゼロ割りなど、意図的にエラーを作り、recoverで安全に処理を続ける方法を試すと理解が深まります。慣れてくると、複雑なプログラムでもpanicとrecoverを活用して、安定したコードを書くことができるようになります。

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語の短絡評価(ショートサーキット)を使った条件式の工夫をやさしく解説!初心者でも理解できる基本知識
New2
Go言語
Go言語の構造体の初期化パターンとコンストラクタ的関数の書き方を徹底解説!初心者でもわかる基本と実用例
New3
Kotlin
Kotlinの例外処理とキャンセルの連携を完全ガイド!初心者でもわかるCoroutineExceptionHandlerの使い方
New4
Go言語
Go言語のクロージャとは?関数内関数の活用例と仕組み
人気記事
No.1
Java&Spring記事人気No1
Kotlin
KotlinのChannelでデータをやり取りする方法を完全ガイド!初心者にもわかる非同期通信の基本
No.2
Java&Spring記事人気No2
Go言語
Go言語でのDB接続情報を環境変数で管理する方法|初心者でも安全に設定
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Kotlinのビルド設定エラーと解決法まとめ!初心者向けGradleトラブル対処ガイド
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Kotlin
Kotlinでテキスト表示・編集!初心者でもわかるTextViewとEditTextの使い方
No.7
Java&Spring記事人気No7
Kotlin
Kotlin DSLとGroovy DSLの違いをやさしく解説!初心者でもわかるGradleスクリプトの使い分け
No.8
Java&Spring記事人気No8
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方

💻 作業効率アップに

ノートPCを縦置きしてデスクを広く。
省スペースで片づく定番スタンド

UGREEN 縦型スタンドをAmazonで見る

※ Amazon広告リンク