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

Go言語のエラーハンドリングの基本パターン(if err != nil)をやさしく解説!初心者でもわかるエラー処理

Go言語のエラーハンドリングの基本パターン(if err != nil)
Go言語のエラーハンドリングの基本パターン(if err != nil)

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

生徒

「先生、Go言語でエラーが起きたとき、どうやって対応すればいいんですか?」

先生

「エラーをチェックするための基本的な書き方があって、それが if err != nil という書き方です。これでエラーの有無を確認して、もしエラーがあったら適切に処理できますよ。」

生徒

「エラーって何ですか?プログラムで何か問題が起きることですか?」

先生

「その通りです。エラーとは、プログラムの実行中に問題や予期しない状態が起きたときのことです。例えば、ファイルが見つからなかったり、ネットワークにつながらなかったりする場合ですね。」

生徒

「どうやってエラーを見つけて、処理するんですか?」

先生

「Go言語では、エラーは特別な値(error型)として返されます。普通の値と一緒にエラーも返すことが多いので、if err != nil でエラーがあるかどうかを調べるんです。」

生徒

「それじゃあ、具体的なコードを見せてください!」

先生

「はい、では基本的な使い方を見ていきましょう!」

1. Go言語のエラーとは?

1. Go言語のエラーとは?
1. Go言語のエラーとは?

プログラムを実行するとき、予期しない問題が起きることがあります。これを「エラー」と呼びます。例えば、読み込みたいファイルが存在しなかったり、計算ができなかったりしたときです。

Go言語では、エラーは特別な「error型」という値で表現されます。関数は結果と一緒に、このerror型の値も返します。エラーがない場合は nil(何もない状態)になります。

2. if err != nil の意味

2. if err != nil の意味
2. if err != nil の意味

Go言語でエラー処理をする基本は、「もしエラーがあるなら何か処理をしよう」ということです。

ここで使う if err != nil は、「err(エラーの値)が nil(エラーなし)じゃないなら」という意味です。つまり「エラーがあるとき」という条件を表しています。

3. 基本的なエラーハンドリングの例

3. 基本的なエラーハンドリングの例
3. 基本的なエラーハンドリングの例

実際にファイルを読み込む例で、エラーがあれば処理を止めたり、エラーメッセージを表示したりするコードを見てみましょう。


package main

import (
    "fmt"
    "os"
)

func main() {
    file, err := os.Open("sample.txt")  // sample.txtを開く
    if err != nil {
        fmt.Println("ファイルを開くときにエラーが発生しました:", err)
        return  // エラーがあったらここで処理を止める
    }
    defer file.Close()  // ファイルを閉じる(プログラム終了時)

    fmt.Println("ファイルを正常に開きました")
    // ここにファイルを使った処理を書く
}

このコードでは、os.Open がファイルを開こうとしますが、失敗すると err にエラー情報が入ります。エラーがあれば if err != nil の中の処理が実行されます。

4. なぜエラー処理が大切なのか?

4. なぜエラー処理が大切なのか?
4. なぜエラー処理が大切なのか?

プログラムは常にうまく動くとは限りません。ユーザーの操作ミスやネットワークの問題、ファイルの紛失など、色々な原因でエラーが起きる可能性があります。

エラー処理をしっかり書くことで、プログラムが突然止まるのを防いだり、問題の原因をわかりやすく教えたりできます。これが「エラーハンドリング」です。

5. if err != nil を使った応用例

5. if err != nil を使った応用例
5. if err != nil を使った応用例

例えば、複数の処理を連続して行うとき、それぞれでエラーをチェックすることが重要です。下の例では、ファイルを書き込みながらエラーを確認しています。


package main

import (
    "fmt"
    "os"
)

func main() {
    file, err := os.Create("output.txt")  // ファイルを作成
    if err != nil {
        fmt.Println("ファイル作成エラー:", err)
        return
    }
    defer file.Close()

    _, err = file.WriteString("こんにちは、Go言語!")
    if err != nil {
        fmt.Println("書き込みエラー:", err)
        return
    }

    fmt.Println("ファイルに正常に書き込みました")
}

このように、処理のたびにエラーがあるかチェックすることで、問題が起きた場所を特定しやすくなります。

6. ポイント整理

6. ポイント整理
6. ポイント整理

Go言語のエラーハンドリングの基本は、if err != nil でエラーの有無を調べることです。エラーがあれば適切に処理し、プログラムの安全な動作を守ります。

初心者でもこのパターンを理解して使うことで、より安定したプログラムを書けるようになります。

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

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

※ Amazon広告リンク

まとめ

まとめ
まとめ

Go言語のエラーハンドリングは、一見すると単純なように見えますが、実際にはプログラム全体の安全性や信頼性を大きく左右する重要な仕組みです。特に、初心者の方が最初につまずきやすいポイントとして「エラーを返す関数の扱い方」「エラーを確認するタイミング」「エラーがあったときに何をすべきか」という三つがあります。今回の記事では、それらを理解するための最も基本的な書き方である if err != nil の使い方を中心に学びました。

Go言語はエラーを例外ではなく「値」として扱うため、関数の戻り値にエラーが含まれることが自然な流れになっています。それによって、プログラムの途中で予期しない停止を避けつつ、どこで何が起きたかを細かく制御できるというメリットがあります。こうした仕組みは初心者にとっても分かりやすく、明確なエラー処理パターンとして非常に優れています。

また、単にエラーをチェックするだけではなく、どのようなエラーが返ってきたかをログに残したり、ユーザーにメッセージとして伝えたりすることも大切です。複数の処理を連続して行う場合には、それぞれの段階でエラーがないかを丁寧に確認することによって、不具合が発生したときに原因を追いやすくなります。実際、Goを使って本格的なアプリケーションやサービスを作る際には、このエラー処理の習慣が欠かせません。

ここでは、より理解を深めるために簡単な応用コードを紹介します。処理が複数段階に分かれており、それぞれでエラー確認を行う典型的な構造です。

追加サンプル:複数ステップの処理でエラーを確認する


package main

import (
    "fmt"
    "os"
)

// 設定ファイルを読み込む関数
func loadConfig(path string) ([]byte, error) {
    data, err := os.ReadFile(path)
    if err != nil {
        return nil, err
    }
    return data, nil
}

// 結果を書き込む関数
func writeResult(result string) error {
    file, err := os.Create("result.txt")
    if err != nil {
        return err
    }
    defer file.Close()

    _, err = file.WriteString(result)
    if err != nil {
        return err
    }
    return nil
}

func main() {
    config, err := loadConfig("config.txt")
    if err != nil {
        fmt.Println("設定ファイル読み込みエラー:", err)
        return
    }

    fmt.Println("設定ファイル読み込み成功:", string(config))

    err = writeResult("処理が正常に完了しました")
    if err != nil {
        fmt.Println("書き込みエラー:", err)
        return
    }

    fmt.Println("結果を書き込みました")
}

このサンプルでは、設定ファイルの読み込みと、結果を書き込む処理が二つの関数として分かれています。それぞれの処理が失敗する可能性を想定し、その場ごとに if err != nil で丁寧にチェックしています。これこそがGo言語のエラーハンドリングの基本であり、正しい姿です。

また、エラーメッセージは将来の自分や他の開発者が読み返したときに状況が判断しやすいように、できるだけ具体的にするのがよいでしょう。例えば「エラーが発生しました」よりも「設定ファイル読み込みエラー」のほうが、状況が明確になります。エラー処理というのは、単にプログラムを止めるための仕組みではなく、後から問題点を分析するための大切な情報源でもあります。

Go言語のエラーハンドリングはとてもシンプルですが、シンプルだからこそコードの読みやすさと安全性が高まり、プログラムの品質向上につながります。初心者のうちから「エラーを受け取ったら必ずチェックする」「エラーがあればメッセージを出す」「処理を安全に中断する」という三つの習慣を身につければ、どんな専門的なアプリケーションにも応用できる確かな基礎が身につきます。

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

生徒

「先生、今日の内容でif err != nilの大切さがよくわかりました!いつも見かける書き方でしたけど、意味がはっきり理解できていませんでした。」

先生

「そうでしょう。Go言語のエラー処理は必ずこの形を通るので、ここを理解しておくとプログラムが一段と書きやすくなりますよ。」

生徒

「エラーが返ってきたらすぐチェックするっていう習慣も大事なんですね。これからは意識して書いてみます!」

先生

「ええ。エラーハンドリングがしっかりできるようになると、プログラム全体の質が一気に上がります。焦らず身につけていきましょうね。」

関連セミナーのご案内

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

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

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

具体的な開発内容と環境

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

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

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

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

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

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

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

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

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

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

セミナー画像

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

関連記事:
カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のwhile的なforループの使い方!条件式ループの基本を解説
New2
Go言語
Go言語プログラムの実行方法まとめ!VSCode・ターミナルでの実行手順を解説
New3
Swift
Swift意味とは?プログラミング言語・金融・鳥の違いを徹底解説
New4
Swift
Swift 戻り値の扱い方と複数戻り値の返し方|初心者でも分かる関数の基本
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
No.2
Java&Spring記事人気No2
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.6
Java&Spring記事人気No6
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.7
Java&Spring記事人気No7
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.8
Java&Spring記事人気No8
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説