カテゴリ: Go言語 更新日: 2026/02/07

Go言語のreturnの使い方!早期リターンでコードをすっきりさせよう

Go言語のreturnの使い方!早期リターンでコードをすっきりさせよう
Go言語のreturnの使い方!早期リターンでコードをすっきりさせよう

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

生徒

「Go言語のreturnって何ですか?どうやって使えばいいんですか?」

先生

「Go言語のreturnは、関数の中で値を返したり、処理を終わらせたりするために使います。とても重要な命令ですよ。」

生徒

「値を返すってどういうことですか?あと、処理を終わらせるって?」

先生

「それでは、具体的な使い方と一緒に、早期リターンという便利な書き方も紹介していきましょう!」

1. Go言語のreturn文とは?

1. Go言語のreturn文とは?
1. Go言語のreturn文とは?

Go言語のreturn文は、関数という小さな処理のまとまりから結果を呼び出し元へ返したり、そこで処理を打ち切ったりするときに使われる基本的で大切な仕組みです。プログラムが「どのタイミングで、どんな値を返すのか」をはっきり示す役割があります。

たとえば「計算した結果を返す」「条件がそろわなければ途中で処理をやめる」といった場面で活用されます。特に初心者がつまずきやすいのが、関数の動きとreturn文の関係ですが、ひとつひとつ順番に理解すると自然と読み書きできるようになります。

簡単な例として、ひとことメッセージを返すだけの関数を見てみましょう。


func message() string {
    return "こんにちは!"
}

この関数は、呼び出されたときに必ず「こんにちは!」という文字列を返します。関数がどんな値を返すのかが明確で、プログラム全体の流れも追いやすくなります。

このように、関数は「特定の処理をまとめて必要なときに使いまわすための仕組み」であり、returnはその結果を呼び出し側へ届ける大切な役割を持っています。

2. 基本的なreturnの使い方

2. 基本的なreturnの使い方
2. 基本的なreturnの使い方

ここでは、Go言語で最もよく使われる「計算して値を返す」という基本パターンを確認してみましょう。return文は、関数の中で計算した結果を呼び出し元へ送り返す役割を持っており、プログラムの流れを理解する上でとても大切です。

まずは2つの数を受け取り、その合計値を返すシンプルな関数を見てみます。プログラミング未経験の人でも読みやすいように、できるだけ処理を小さくしています。


package main

import "fmt"

func add(a int, b int) int {
    // a と b を足した結果を result に入れる
    result := a + b
    // 計算結果を呼び出し元へ返す
    return result
}

func main() {
    sum := add(3, 5)
    fmt.Println("合計は", sum)
}

この例では、add関数が受け取った数値を足し合わせ、そのままreturnによって戻しています。戻ってきた値はmain関数のsumに入り、そのあと画面に表示されます。returnのおかげで、「どこで計算した値がどこへ渡るのか」がはっきりして、プログラムの流れが追いやすくなるのがポイントです。


合計は 8

このように、return文は「関数の結果をはっきり伝える」ための基本的で重要な仕組みです。小さな例でも、returnの動きを意識して読むことで、今後より複雑な処理を理解しやすくなっていきます。

3. 早期リターン(early return)とは?

3. 早期リターン(early return)とは?
3. 早期リターン(early return)とは?

早期リターンとは、ある条件を満たしたときに、関数の途中でreturnして処理を終わらせるテクニックです。これにより、無駄なネスト(入れ子)を避けて、コードを読みやすくできます。

たとえば、次のようなコードを見てみましょう。


package main

import "fmt"

func greet(name string) {
    if name == "" {
        fmt.Println("名前が入力されていません")
        return
    }
    fmt.Println("こんにちは、", name, "さん!")
}

func main() {
    greet("")        // 空の文字列を渡す
    greet("タロウ")  // 名前を渡す
}

名前が入力されていません
こんにちは、 タロウ さん!

このコードでは、nameが空文字(つまり名前がない状態)のとき、すぐにreturnして「名前が入力されていません」と表示して終わります。

条件に当てはまらないときは、次の処理(「こんにちは」のメッセージ)に進みます。

4. returnを使わないとどうなる?

4. returnを使わないとどうなる?
4. returnを使わないとどうなる?

もしreturnを使わないで同じことをしようとすると、コードが深くネストされてしまって読みづらくなります。


func greet(name string) {
    if name == "" {
        fmt.Println("名前が入力されていません")
    } else {
        fmt.Println("こんにちは、", name, "さん!")
    }
}

こうしたelseによるネストは、処理が多くなるととても読みにくくなる原因になります。早期リターンを使うことで、無駄なelseを減らしてコードをすっきりさせられるのです。

5. returnで複数の値を返すこともできる

5. returnで複数の値を返すこともできる
5. returnで複数の値を返すこともできる

Go言語では、関数から複数の値を返すこともできます。これは他の多くのプログラミング言語にはない特徴です。

例えば、割り算の結果と余りの両方を返す関数を作れます。


package main

import "fmt"

func divide(a int, b int) (int, int) {
    quotient := a / b
    remainder := a % b
    return quotient, remainder
}

func main() {
    q, r := divide(10, 3)
    fmt.Println("商:", q)
    fmt.Println("余り:", r)
}

商: 3
余り: 1

(int, int)のように2つの戻り値の型を指定することで、returnで2つの値をまとめて返すことができます。受け取るときも、カンマで区切って2つの変数に入れます。

6. 関数の最後にreturnがある理由

6. 関数の最後にreturnがある理由
6. 関数の最後にreturnがある理由

関数の処理が終わったら、何かしらの結果を返す必要がある場合があります。そのため、最後にreturnを書くのが基本です。

逆に、何も返さない関数(戻り値がない関数)の場合は、returnを書かなくても動きますが、処理を途中でやめたいときに使うこともあります。

たとえば次のように書くと、値は返していませんがreturnによって途中で終了しています。


func checkAge(age int) {
    if age < 0 {
        fmt.Println("年齢が不正です")
        return
    }
    fmt.Println("年齢は", age, "歳です")
}

7. returnと「何もしない関数」の使い方

7. returnと「何もしない関数」の使い方
7. returnと「何もしない関数」の使い方

「条件を満たさなければ何もせずに戻る」という考え方も、Go言語ではよく使われます。

これは、例えばエラーチェックのときや、設定が正しくないときなどに使われます。


func setup(config string) {
    if config == "" {
        return
    }
    fmt.Println("設定:", config)
}

このように、特に何も表示せずにreturnで静かに抜けることも可能です。

まとめ

まとめ
まとめ

Go言語のreturn文について振り返ってみると、関数の中で処理を終了させるための基本的な仕組みでありながら、実際の開発ではとても幅広い場面で使われる重要な構文だと改めて感じられます。特にreturnは単に値を返すだけではなく、関数全体の流れを整理したり、無駄なネストをなくして読みやすいコードを実現したりするための柱のような存在です。記事の中で学んだ早期リターンという考え方は、条件分岐が多くなる関数で威力を発揮し、コードの意図をより明確にしてくれます。実務でも保守性を高める上で非常に役立つため、初学者のうちから身につけておくと後々困る場面がぐっと減るでしょう。

また、Go言語ならではの特徴として、returnで複数の値を返せる点も印象的です。商と余りを同時に返すような使い方はもちろんのこと、エラー処理でも結果とエラーの両方を返すのが一般的で、Goの記述スタイルを形成しているともいえます。複数の戻り値を自然に扱えるため、処理を分かりやすく分離でき、呼び出し側のコードもすっきり整います。関数設計に自由度があり、エラー制御まで一貫してreturnで行えるため、Go特有の明快なスタイルがそのまま表れています。

さらに、returnを使って途中終了するパターンは、実際のプログラムの中でも判断分岐が複雑になるタイミングで非常に役に立ちます。年齢入力の例や設定チェックの例のように、値が正しくなければ静かに終了させたい状況は多く、そのときに無用な処理を進めないための安全装置としてreturnが機能します。プログラム全体の安全性を高めることにもつながり、単純な文法以上の意味を持つことが理解できたはずです。

実際の開発では、returnの使い方ひとつでコードの読み手の印象が変わります。特に関数冒頭にチェック処理を書き、条件に合わなければすぐにreturnしてしまう早期リターンの書き方は、理由が明確で、読み手が迷わずに先を追えるため、経験者ほど積極的に取り入れる傾向があります。Go言語はシンプルな構文を重視しているため、このスタイルが非常に自然に馴染んでいると言えます。

まとめとして意識しておきたいのは、returnが「値を返すための構文」という範囲を超えて、関数の流れ全体を整理する道具でもあるということです。早期リターンによって無駄な条件分岐を避け、複数戻り値によって処理の結果を丁寧に返し、静かに終了させるreturnを使って安全に関数の役割を終える。これらすべてを組み合わせることで、読みやすく保守しやすいGoらしいコードが形作られます。関数の中で「ここで処理を終えたい」と思った瞬間にreturnが活躍するため、意識していくほど自然に最適なタイミングでreturnを置けるようになるでしょう。

サンプルプログラムでふりかえり

最後にReturnの考え方をふりかえれる小さなプログラムをひとつ載せておきます。条件チェック、複数戻り値、早期リターンの要素がすべてまとまっているため、練習用としても扱いやすい内容です。


package main

import "fmt"

func checkAndDivide(a int, b int) (int, int, bool) {
    if b == 0 {
        return 0, 0, false
    }
    quotient := a / b
    remainder := a % b
    return quotient, remainder, true
}

func main() {
    q, r, ok := checkAndDivide(15, 0)
    if !ok {
        fmt.Println("割り算できませんでした")
        return
    }
    fmt.Println("商:", q, "余り:", r)
}

このようにreturnは、状況に応じて値を返し、処理の分岐を整理し、関数の役割を明確にしてくれる中心的な働きを持っています。特に戻り値に成功フラグを持たせる書き方はGo言語で頻繁に登場するため、今回の理解を土台に今後さらに応用的なコードに触れると、自然に使いこなせるようになるはずです。

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

生徒

「returnってただ値を返すだけじゃなくて、関数の流れを整えるためにも使われているんですね。早期リターンがすごく便利だと改めてわかりました。」

先生

「その通りです。Goはシンプルで読みやすいコードを大事にしているので、returnがうまく機能する場面が非常に多いです。条件に合わなければすぐに戻る、複数の値を返す、そして静かに処理を終える。どれもGoの流儀に合った大事な使い方ですよ。」

生徒

「複数戻り値も思ったより自然に使えるんですね。エラー処理でもよく見るって聞いたので、これからの実装でも意識してみます。」

先生

「どんどん慣れていきましょう。returnは基本だけど非常に奥が深い構文です。今回学んだことを丁寧に積み重ねていけば、きっと読みやすく安全なGoコードを書けるようになりますよ。」

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

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

※ Amazon広告リンク

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Go言語のreturn文はなぜ関数の最後に書くことが多いのですか?

Go言語では、関数が処理を終えた後に結果を返すためにreturn文が必要になることが多いため、関数の最後に配置されることが自然です。戻り値を明確にすることで関数の役割を理解しやすくなり、コード全体の可読性が高まります。
関連セミナーのご案内

【超入門】ゼロから始める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の演算子一覧と使い方!算術・比較・論理演算子の基本を解説