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

Go言語の関数の戻り値に名前をつける書き方を解説!初心者でもわかる名前付き戻り値の基本

Go言語の関数の戻り値に名前をつける書き方(名前付き戻り値)
Go言語の関数の戻り値に名前をつける書き方(名前付き戻り値)

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

生徒

「Go言語で関数を勉強してたら、『名前付き戻り値』っていうのが出てきたんですけど、どういうものなんですか?」

先生

「それはいいところに気づいたね。Go言語では、関数の戻り値に名前をつけることができるんだ。それを“名前付き戻り値”って呼ぶよ。」

生徒

「名前をつけると、何が便利なんですか?」

先生

「それを今から、丁寧にわかりやすく解説していくね!」

1. 名前付き戻り値とは?

1. 名前付き戻り値とは?
1. 名前付き戻り値とは?

Go言語では、関数の「返り値そのもの」にあらかじめわかりやすい名前を付けられます。これが「名前付き戻り値(Named Return Values)」です。関数の定義で名前を宣言すると、その名前は関数の中で使える通常の変数として扱えます。処理の最後にreturnとだけ書けば、その変数に入っている値がそのまま戻されるため、初心者でも読みやすく自然な流れで結果を返せます。

イメージとしては、関数の入り口で「結果を入れる箱」にラベルを貼っておく感じです。箱の中身(値)を途中で代入・更新でき、最後に箱ごと返すだけで済みます。さらに、数値なら初期値は0、文字列なら""のようにゼロ値が自動で入るため、余計な初期化コードも減らせます。まずは短い例で動きを確認してみましょう。


package main

import "fmt"

// 戻り値msgに名前を付ける:関数内でそのまま使える
func greet(name string) (msg string) {
    if name == "" {
        msg = "こんにちは"
        return // msgの中身がそのまま返る
    }
    msg = "こんにちは、" + name
    return
}

func main() {
    fmt.Println(greet(""))       // こんにちは
    fmt.Println(greet("太郎"))   // こんにちは、太郎
}

この例では、msgが戻り値の名前です。関数本体で値を代入し、returnだけで返しています。「どんな値を返すのか」が名前から伝わるため、後から読んだときも意図をつかみやすくなります。まずは「戻り値に名前を付けると、関数内でその名前の変数を使って値を整え、最後はreturnだけで返せる」という基本だけ押さえておけば十分です。

2. 名前付き戻り値の基本的な書き方

2. 名前付き戻り値の基本的な書き方
2. 名前付き戻り値の基本的な書き方

名前付き戻り値の書き方は「関数の戻り値リストで変数名を宣言する」「関数内でその変数へ代入する」「最後はreturnだけを書く」の三段構成です。戻り値の名前は関数スコープ内の通常の変数として扱えるため、途中で値を作り替えたり、条件分岐ごとに異なる内容を設定したりできます。数値や文字列などはゼロ値が自動で入るので、最初に必ずしも初期化を書く必要はありません。


package main

import "fmt"

// 戻り値resultに名前を付ける基本形
func add(a int, b int) (result int) {
    result = a + b       // 関数内で代入
    return               // resultがそのまま返る
}

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

この例では、(result int)が「戻り値にresultという名前を付ける」宣言です。関数本体ではresult = a + bと代入し、returnだけで返却できます。呼び出し側から見ると通常の関数と同じ使い方ですが、関数の中では「最終的に返す値」が変数名で常に見えているため、読み手は処理の意図を追いやすくなります。

もう一つ、初心者がつまずきやすい条件分岐つきの例も確認しておきましょう。空の入力など特定条件では早めに返したい場面でも、戻り値名を使うと流れが素直に書けます。


package main

import "fmt"

// 入力が0のときは早期returnで0を返す例
func safeDouble(n int) (doubled int) {
    if n == 0 {
        // doubledはゼロ値(0)のまま
        return
    }
    doubled = n * 2
    return
}

func main() {
    fmt.Println(safeDouble(0))  // 0
    fmt.Println(safeDouble(7))  // 14
}

このサンプルでは、n == 0の場合にそのままreturnしています。名前付き戻り値doubledにはゼロ値が入っているため、余計な代入を書かなくても安全に「0」を返せます。こうした「最後に返す値」を常にひとつの名前で扱える点が、名前付き戻り値の分かりやすさと書きやすさにつながります。

3. 名前付き戻り値のメリットとは?

3. 名前付き戻り値のメリットとは?
3. 名前付き戻り値のメリットとは?

名前付き戻り値を使うと、関数の意図が読み取りやすくなり、後からコードを見直したときにも迷いにくくなります。特にGo言語はシンプルな書き方を大切にする言語なので、戻り値に役割のある名前をつけておくことで、処理の流れが自然と伝わりやすくなります。

  • コードの読みやすさが向上
    戻り値の名前がそのまま役割を表すので、初めてその関数を読む人でも「何を返している関数なのか」が直感的に理解できます。
  • 複数の戻り値があるときに便利
    ミスが起きやすい「戻り値の順番」を気にする必要が少なくなり、デバッグもしやすくなります。
  • return文がシンプルになる
    returnだけで返せるため、余分な記述を書かずに済み、処理の流れにも集中できます。

たとえば、計算結果とメッセージの2つを返す関数を考えてみます。名前付き戻り値を使うと、それぞれの意味が一目でわかります。


package main

import "fmt"

// 名前付き戻り値で、意味のある名前を付けた例
func checkScore(score int) (message string, passed bool) {
    if score >= 70 {
        message = "合格です"
        passed = true
        return
    }
    message = "残念ながら不合格"
    passed = false
    return
}

func main() {
    msg, ok := checkScore(82)
    fmt.Println(msg, ok) // 合格です true
}

このように、戻り値に名前があることで、関数の返す値の意味を説明するコメントを減らしつつ、読みやすさと理解しやすさを両立できます。初心者でも扱いやすく、チーム開発でもコードの意図が共有しやすくなるのが大きなメリットです。

4. 通常の戻り値との違いを比較してみよう

4. 通常の戻り値との違いを比較してみよう
4. 通常の戻り値との違いを比較してみよう

名前付き戻り値を使わない場合、次のように書きます:


func add(a int, b int) int {
    return a + b
}

この書き方でも問題はありませんが、名前付き戻り値を使うと、下のようにより明示的になります:


func add(a int, b int) (sum int) {
    sum = a + b
    return
}

sumという名前があることで、何が戻ってくるかが明確になっています。

5. 複数の戻り値に名前をつける方法

5. 複数の戻り値に名前をつける方法
5. 複数の戻り値に名前をつける方法

Go言語では、関数から複数の値を戻すことができます。これにも名前をつけることができます。


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

この関数では、quotient(商)とremainder(余り)の2つの戻り値に名前をつけています。使う側も次のように使えます:


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

商: 3
余り: 1

6. 名前付き戻り値を使うときの注意点

6. 名前付き戻り値を使うときの注意点
6. 名前付き戻り値を使うときの注意点

便利な名前付き戻り値ですが、使いすぎるとコードが分かりづらくなることもあります。次のポイントに気をつけましょう:

  • 関数の処理が短く、明確なときに使うと良い。
  • 変数名は意味のある名前にする。
  • returnのあとに何も書かないため、何が戻るか一目でわかるようにしておく。

特に、関数が長く複雑になると、returnだけでは何が返るか見づらくなることもあるので、状況に応じて使い分けるのが大切です。

まとめ

まとめ
まとめ

ここまで、Go言語の関数で活用できる名前付き戻り値について、初心者のかたでも迷わず理解できるように、なるべく専門用語を使わず、ゆっくり丁寧に解説してきました。名前付き戻り値は、単なる便利な書き方に見えますが、実際には読みやすいコードを書くための大切な考え方が詰まっています。プログラミングを勉強すると、どうしても「動けばいい」と思いがちですが、読みやすさや意味の伝わりかたはとても重要です。仕事としてプログラムを書くようになれば、他の人が読むことも増え、チームで開発する機会も増えていきます。そのとき、名前付き戻り値はしっかり役に立ちます。戻される値に名前が付いているだけで、「この関数は何を返すものなのか」がひと目でわかるので、プログラムの流れを追いやすくなり、読み手の理解を助けてくれます。

また、Go言語は複数の戻り値を返せることが大きな特徴です。商と余りを同時に返すような関数でも、例えば「quotient」と「remainder」のように名前が付いていれば、何の値が返ってきているのか説明がなくても伝わります。初心者が最初につまずきやすいのは、記号や短い名前が続き、思考が追い付かなくなる場面です。しかし、名前付き戻り値を使うことで、「この変数は何を意味するのだろう」という余計な迷いが減り、安心してコードを追いかけられます。「名前そのものが説明になる」ので、自然に読みやすいコードになります。

ただ、便利な機能ほど使い方には注意が必要です。記事の中でも触れましたが、長く複雑な関数で名前付き戻り値を使うと、逆に何が起きているのか分かりづらくなることがあります。特に、途中の条件分岐で値が設定されたり、何度も変数の中身を書き換えたりすると、戻ってくる値を追うのに時間がかかります。名前付き戻り値は、短くシンプルな関数で使ったとき、もっとも読みやすい効果を発揮します。つまり、大切なのは「いつ使うのか」、そして「どう使うのか」という考え方です。

実際に簡単なサンプルとして、読みやすさを優先した名前付き戻り値の使い方をもう一度まとめておきます。初心者のかたが安心して練習できるように、短いコードでまとめました。

もう一度わかりやすいサンプルを確認しよう


package main

import "fmt"

// 名前付き戻り値でメッセージを返す関数
func hello(name string) (message string) {
    if name == "" {
        message = "名前が入力されていません"
        return
    }
    message = name + "さん、こんにちは"
    return
}

func main() {
    fmt.Println(hello("太郎"))
    fmt.Println(hello(""))
}

この短い例でも、名前付き戻り値の良さを感じられると思います。何が返ってくるのかが明確で、returnだけで処理を終えられるのは安心感があります。初心者の場合、文章のように自然に読めるコードのほうが覚えやすく、自分が書いた処理にも自信が持てます。プログラミングは「書いて覚える」だけではなく、「読んで理解する」こともとても大事です。同じ内容でも読みやすいほうが理解が深まり、つまずきにくいので、ぜひ練習の中で名前付き戻り値を活用してみてください。

さらに、関数が複数の戻り値を扱うときには、名前付き戻り値を意識することで、エラー処理や計算処理が見やすくなります。特に、初心者が慣れてくると、エラーを一緒に返したり、計算結果を二つ以上戻したくなる場面が増えていきます。そのとき、名前が付いていれば、配列や数字だけを返されるより理解が早くなります。文章を読むようにコードを読める状態は、とても良いプログラミングの練習方法です。

最後に、名前付き戻り値は必ず使わないといけない機能ではありません。通常のreturnを書きたいときには、今まで通り値を直接書いて問題ありません。大事なのは、「この関数はどちらの書き方のほうが読みやすいだろう」と考えて選ぶことです。選び方を考える意識が身につけば、自分のコードが一段と読みやすくなり、ほかの人にも喜ばれる書き方ができます。こうした積み重ねが、プログラミングの上達につながっていきます。

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

生徒

「最初は名前付き戻り値って難しそうだと思っていましたけど、意味が分かってみたら便利なんだと思いました。普通のreturnとどう違うのか理解できました。」

先生

「そうだね。名前が付いているだけで、何が返ってくるのか読みやすくなるから、初心者のうちはとても助かるはずだよ。特に、複数の値を返す関数では違いがはっきり見えるよ。」

生徒

「あと、returnだけで値が返るっていう仕組みが面白かったです。短い関数ならすっきり書けて気持ちいいですね。」

先生

「うん。ただし、長い関数では逆に何が返るのか追いにくくなることもあるから、使う場所を選ぶことも大事なんだ。今日の学びをそのまま実践していけば、コードの書き方がどんどん上手になるよ。」

生徒

「わかりました!これから作るプログラムで名前付き戻り値と普通の戻り値、どっちが読みやすいか考えながら書いてみます!」

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

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

※ Amazon広告リンク

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

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

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

Go言語の名前付き戻り値は、普通のreturnと何が違うのですか?

Go言語では、通常のreturnは戻す値を毎回書く必要があります。いっぽう名前付き戻り値の場合は、関数の戻り値に名前をつけておき、関数の中でその変数に値を入れるだけで、最後に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
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
No.8
Java&Spring記事人気No8
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法