カテゴリ: Go言語 更新日: 2025/12/10

Go言語のエラーハンドリングを関数にまとめてコードを整理しよう!初心者でもわかるエラー処理の基本

Go言語のエラーハンドリングを関数にまとめてコードを整理しよう
Go言語のエラーハンドリングを関数にまとめてコードを整理しよう

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

生徒

「先生、Go言語でエラーが起きたときの処理を簡単に書きたいんですけど、毎回同じエラー処理を書くのは面倒です。どうすればいいですか?」

先生

「いい質問ですね。Goではエラー処理を関数にまとめて再利用すると、とてもコードがスッキリして管理しやすくなります。具体的にどうまとめるか見てみましょう。」

生徒

「関数にまとめると、どんなメリットがありますか?」

先生

「同じエラー処理を書く手間が省けて、コードの見通しが良くなり、バグも減ります。あと、エラーの内容を統一的にログに残したり、ユーザーに伝えたりしやすくなるんですよ。」

1. Go言語のエラーハンドリングとは?

1. Go言語のエラーハンドリングとは?
1. Go言語のエラーハンドリングとは?

エラーハンドリングとは、プログラムが予期しない問題に遭遇した時に、その問題を適切に処理することを指します。例えば、ファイルが見つからない、ネットワークが切れた、などが挙げられます。

Go言語では関数の戻り値としてerror型を返し、呼び出し元でエラーかどうかを判定し処理します。これはエラーを明示的に扱える良い設計です。

2. 毎回エラー処理を書くのは面倒?関数にまとめてみよう

2. 毎回エラー処理を書くのは面倒?関数にまとめてみよう
2. 毎回エラー処理を書くのは面倒?関数にまとめてみよう

例えば、ファイルを読み込む時にエラーが発生したら「エラーが起きました」と表示し、プログラムを止める処理を書きますが、毎回この処理を書くのは大変です。

そこで「エラー処理をまとめる関数」を作ると便利です。


func checkError(err error) {
    if err != nil {
        fmt.Println("エラーが発生しました:", err)
        os.Exit(1) // プログラムを終了
    }
}

この関数を使えば、エラーのたびに長いコードを書かずに済みます。

3. 関数にまとめたエラー処理の使い方

3. 関数にまとめたエラー処理の使い方
3. 関数にまとめたエラー処理の使い方

例えば、ファイルを開く処理でエラー処理関数を使ってみましょう。


func main() {
    file, err := os.Open("test.txt")
    checkError(err) // エラーがあれば処理を終了

    // ファイルの中身を読み込みたい処理など
    defer file.Close()
    // ここにファイル読み込みコード
}

このようにcheckErrorを呼び出すだけで、エラーがあればメッセージ表示と終了が行われます。

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

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

※ Amazon広告リンク

4. エラー処理関数をカスタマイズしよう

4. エラー処理関数をカスタマイズしよう
4. エラー処理関数をカスタマイズしよう

エラー処理関数は状況に応じて自由に変えられます。例えば、ログファイルにエラーを書き込んだり、ユーザーに分かりやすいメッセージを表示したりできます。


func checkError(err error) {
    if err != nil {
        log.Printf("エラー詳細: %v\n", err)
        fmt.Println("問題が発生したため、処理を中止します。")
        os.Exit(1)
    }
}

この例ではエラー内容をログに記録し、ユーザー向けメッセージも表示しています。

5. 複数の場所で使える便利なエラー処理関数を作ろう

5. 複数の場所で使える便利なエラー処理関数を作ろう
5. 複数の場所で使える便利なエラー処理関数を作ろう

複数の関数で共通のエラー処理を使うことで、プログラム全体のコードがシンプルで分かりやすくなります。

例えば、ファイルの読み書きやネットワーク通信など、エラーが発生しやすい処理で役立ちます。

6. エラー処理を関数にまとめると保守が楽になる理由

6. エラー処理を関数にまとめると保守が楽になる理由
6. エラー処理を関数にまとめると保守が楽になる理由

コードのどこかでエラーの扱い方を変えたくなった時、エラー処理を関数にまとめておけば、その関数だけ直せば済みます。これを「保守性が高い」と言います。

逆に、同じエラー処理コードがたくさん散らばっていると、変更が大変でミスも増えます。

7. 覚えておきたいポイント

7. 覚えておきたいポイント
7. 覚えておきたいポイント

Go言語でエラーハンドリングを関数にまとめることで、コードが見やすくなり、再利用しやすくなります。error型を必ずチェックして、問題があれば早めに処理を止めることが基本です。

エラー処理をまとめる関数は自由にカスタマイズ可能なので、自分のプログラムに合った形を考えてみてください。

まとめ

まとめ
まとめ

エラー処理を関数にまとめて管理する意味と効果

Go言語のエラーハンドリングは、とてもシンプルでありながら柔軟性が高く、初心者でも落ち着いて理解しやすい仕組みになっています。しかし、同じようなエラー処理を毎回その場で書き続けていると、どうしてもコードが散らかったり、修正が必要になったときに手間が増えてしまったりします。そこで役に立つのが「エラー処理を関数にまとめる」という考え方です。 この方法を使うと、エラー発生時の動きが常に一定になり、プログラム全体の見通しがとても良くなるだけでなく、書くコードの量も大幅に減らすことができます。

また、関数化したエラー処理は、あとで仕様を変更したい場合にも非常に便利です。たとえば、これまでは画面にメッセージを出すだけだったエラー処理を、ログに残すように変更したい、あるいはユーザー向けの案内文を追加したいといったとき、エラー処理関数を一箇所変更するだけで済みます。これにより保守性が大きく向上し、プログラムの信頼性も高まります。初心者でも実践しやすく、日常の開発で自然に役立つ考え方です。

初心者向けやさしいエラー処理関数サンプル

実際に、エラー処理を関数としてまとめて使うとどのようにスッキリ書けるのか、次のサンプルで確認してみましょう。とてもシンプルな構造ですが、関数化の効果がよく伝わる例になっています。


package main

import (
    "fmt"
    "log"
    "os"
)

// どの場面でも使える簡単なエラー処理関数
func handleError(err error) {
    if err != nil {
        log.Printf("エラー内容: %v\n", err)
        fmt.Println("問題が発生したため、処理を中止します。")
        os.Exit(1)
    }
}

func main() {
    // テストとして存在しないファイルを開く
    file, err := os.Open("no_such_file.txt")
    handleError(err)

    // 正常時だけ実行される処理
    defer file.Close()
    fmt.Println("ファイルオープン成功!")
}

このサンプルでは、ファイルの読み込みで問題が起きた場合に、ログへの記録とメッセージ表示、そして安全な終了までをまとめて処理しています。呼び出し側はhandleErrorを呼ぶだけでよいので、コードの読みやすさや保守のしやすさが格段に向上します。初めのうちは小さな関数で構わないので、自分の書くコードに合わせて少しずつ改良してみると良いでしょう。

エラー処理を関数にまとめることで見えてくるプログラムの流れ

関数化されたエラー処理の利点は、単にコードが短くなるだけではありません。「どこでエラーが発生しうるか」がはっきりし、プログラム全体の流れがわかりやすくなるのも大きなポイントです。 呼び出し側はエラーがあった時点で処理を止めるのか、それとも続行すべきなのかを判断しやすくなり、自然と「安全なコードを書くための考え方」が身についていきます。特に複雑な処理が増えてくると、エラー処理の一貫性が重要になり、この設計が役立ちます。

また、ログ出力やユーザー向けメッセージの統一も簡単になります。同じ形式のメッセージが全体で使われるため、トラブルが起きたときも原因を追いやすくなり、バグや不具合の調査がスムーズです。小さなプログラムでも効果は十分にありますので、ぜひ積極的に取り入れてみてください。

先生と生徒の振り返り会話

生徒

「エラー処理を関数にまとめるだけでこんなにコードがスッキリするとは思いませんでした!いろんな場所で使えそうですね。」

先生

「その気づきはとても大切です。まとめておくことで、どこでエラーが起きても統一的に処理できますし、あとから変更するときも一箇所で済むので楽になりますよ。」

生徒

「たしかに実務でメッセージを変えたいことも多いから、これなら安心ですね。ログにも残せるのが良いです!」

先生

「ええ。少しずつ機能を追加しながら自分のスタイルに合ったエラー処理関数を育てていくと、より質の高いコードが書けるようになります。今日の内容をぜひ活かしてくださいね。」

関連記事:
カテゴリの一覧へ
新着記事
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
Kotlinのビルド設定エラーと解決法まとめ!初心者向けGradleトラブル対処ガイド
No.4
Java&Spring記事人気No4
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
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
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方

💻 作業効率アップに

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

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

※ Amazon広告リンク