カテゴリ: 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を捕まえ、テストが異常終了しないようにしています。

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が発生するかを確認できます。

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

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

※ Amazon広告リンク

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

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

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

関連セミナーのご案内

【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導

「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。

本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。

具体的な開発内容と環境

【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。

【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。

この60分で得られる3つの理解

1. 環境構築の完全な理解

「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。

2. Go言語の基本構造(変数・型)

データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。

3. 読みやすいコードの書き方

ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。

※本講座は、将来的にバックエンドエンジニアクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。

セミナー画像

初めてのGo言語を一緒に学びましょう!

カテゴリの一覧へ
新着記事
New1
Swift
Swiftのprint文の使い方とデバッグの基本!初心者でも安心して学べる出力方法
New2
Swift
Swift変数と定数の使い方|varとletの違いを初心者向けに解説
New3
Go言語
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
New4
Go言語
Go言語のクロージャとは?関数内関数の活用例と仕組み
人気記事
No.1
Java&Spring記事人気No1
Kotlin
Kotlinのsettings.gradleファイルを完全解説!初心者でもわかるプロジェクト設定の基本
No.2
Java&Spring記事人気No2
Go言語
Swiftの配列(Array)の使い方を完全ガイド!初心者でもわかるデータのまとめ方
No.3
Java&Spring記事人気No3
Kotlin
KotlinのRoomで複雑なクエリを使いこなす!初心者でもわかる応用テクニック
No.4
Java&Spring記事人気No4
Go言語
Go言語のSQLインジェクション対策を完全解説!初心者でも安全なデータベース操作がわかる
No.5
Java&Spring記事人気No5
Swift
SwiftでAttributedStringとNSAttributedStringを使ったリッチテキスト表示の基本
No.6
Java&Spring記事人気No6
Swift
Swiftの高階関数map・filter・reduceを完全解説!初心者でもわかる配列操作の基本
No.7
Java&Spring記事人気No7
Go言語
Go言語のgo installコマンドの役割とインストール先の仕組みを徹底解説!
No.8
Java&Spring記事人気No8
Go言語
Swiftの文字列操作を完全ガイド!初心者でもわかるStringの基本