カテゴリ: Go言語 更新日: 2026/01/14

Go言語の無名関数(匿名関数)の書き方と基本的な使い方

Go言語の無名関数(匿名関数)の書き方と基本的な使い方
Go言語の無名関数(匿名関数)の書き方と基本的な使い方

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

生徒

「Go言語を勉強していたら、無名関数(匿名関数)という言葉が出てきたのですが、これは何ですか?」

先生

「いい質問ですね。Go言語では、関数に名前をつけずに、その場で定義して使うことができるんです。それが無名関数(匿名関数)です。」

生徒

「名前をつけない関数って、どんなときに使うんですか?」

先生

「では、Go言語における無名関数の基本的な使い方を、これから一緒に見ていきましょう!」

1. 無名関数(匿名関数)とは?

1. 無名関数(匿名関数)とは?
1. 無名関数(匿名関数)とは?

Go言語(Golang)では、名前をつけずにその場で動作をまとめられる関数を定義できます。これが無名関数(匿名関数)です。通常の関数のように名前を用意しなくてもよいため、小さな処理を手早く書きたいときに役立ちます。

たとえば「ちょっとした計算を一度だけ実行したい」「画面にメッセージを出すだけの短い処理を書きたい」といった場面では、無名関数を使うことでコードがスッキリし、読みやすくなります。

初心者の方でも分かりやすい例として、次のような “あいさつを一回だけ実行する” 無名関数があります。


package main

import "fmt"

func main() {
    func() {
        fmt.Println("はじめまして!これは無名関数の簡単な例です。")
    }()
}

このように、無名関数は「名前をつけるほどではない短い動き」をその場で表現する場面にぴったりです。最初は少し不思議に感じるかもしれませんが、慣れてくると自然に使いこなせるようになります。

2. 無名関数の基本構文

2. 無名関数の基本構文
2. 無名関数の基本構文

Go言語における無名関数の基本的な書き方は以下の通りです。


func() {
    fmt.Println("これは無名関数です")
}()

このように、func()で関数を定義し、最後に()をつけることで、すぐに実行されます。

無名関数は、即時実行できるという点がポイントです。

3. 実際の実行例を見てみよう

3. 実際の実行例を見てみよう
3. 実際の実行例を見てみよう

Go言語で無名関数を実際に使った簡単な例を見てみましょう。


package main

import "fmt"

func main() {
    func() {
        fmt.Println("Hello, 無名関数!")
    }()
}

このコードを実行すると、次のような出力が表示されます。


Hello, 無名関数!

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

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

※ Amazon広告リンク

4. 無名関数に引数を渡すには?

4. 無名関数に引数を渡すには?
4. 無名関数に引数を渡すには?

無名関数にも引数を渡すことができます。普通の関数と同じように、引数を定義し、呼び出し時に値を渡します。


package main

import "fmt"

func main() {
    func(name string) {
        fmt.Println("こんにちは、" + name + "さん!")
    }("太郎")
}

このコードの出力は次のようになります。


こんにちは、太郎さん!

ポイント:引数の定義はfunc(name string)のように行い、呼び出すときはその直後の("太郎")で渡します。

5. 無名関数を変数に代入することもできる

5. 無名関数を変数に代入することもできる
5. 無名関数を変数に代入することもできる

無名関数は、そのまま変数に代入して、あとで呼び出すこともできます。


package main

import "fmt"

func main() {
    greet := func(name string) {
        fmt.Println("ようこそ、" + name + "さん!")
    }

    greet("花子")
    greet("一郎")
}

出力は次のようになります。


ようこそ、花子さん!
ようこそ、一郎さん!

このように、無名関数を変数に入れて再利用することも可能です。

6. 無名関数とクロージャ

6. 無名関数とクロージャ
6. 無名関数とクロージャ

Go言語では、無名関数を使ってクロージャという機能を使うこともできます。クロージャとは、外側の変数にアクセスできる関数のことです。


package main

import "fmt"

func main() {
    count := 0

    increment := func() {
        count++
        fmt.Println("カウント:", count)
    }

    increment()
    increment()
}

このコードでは、無名関数がcountという外の変数にアクセスして、値を更新しています。


カウント: 1
カウント: 2

このように、無名関数を使えば、プログラムの中で変数を閉じ込めて管理することができます。

7. 無名関数を使うメリットとは?

7. 無名関数を使うメリットとは?
7. 無名関数を使うメリットとは?

無名関数を使う主なメリットは、次のような点です:

  • 一時的な処理を簡潔に記述できる
  • クロージャを使って変数の状態を保持できる
  • 関数の定義をその場に書けるため、コードが読みやすくなる

ただし、複雑すぎる無名関数はかえって読みづらくなることがあるので、使いすぎには注意しましょう。

まとめ

まとめ
まとめ

無名関数の使い方をひとつずつ整理してみよう

ここまでGo言語の無名関数について学んできましたが、あらためて振り返ってみると、無名関数という仕組みはとても柔軟で、さまざまな場面で役立つことがよく分かります。まず、無名関数は名前を付けなくても定義でき、その場ですぐに使える便利な存在です。ほんの短い処理をわざわざ別の関数として定義する必要がなく、コードの流れをそのまま文章のように書けるところが魅力です。特に、即時実行できる点はGo言語の学習が進むほど活用することが増えていきます。

また、無名関数に引数を渡す書き方も普通の関数とほぼ同じため、初心者でも取り組みやすい構文になっています。「呼び出し時にかっこを付けて実行する」という特徴だけ押さえれば問題ありません。さらに、無名関数は変数に代入して何度も使いまわすこともできるので、ちょっとした処理をまとめたいときにも非常に便利です。関数を変数として扱えるという考え方は、関数型言語の特徴でもありますが、Go言語でも自然に利用できます。

そして見逃せないのがクロージャの存在です。無名関数が外側の変数にアクセスし、その値を保持し続けられるという仕組みは、実際のプログラムの中でも活躍の場が多くあります。ある値を内部に閉じ込めながら必要なときにだけ操作することができるため、状態管理や独自の動作を作りたいときに強力な道具になります。

無名関数のメリットは「簡潔さ」「柔軟性」「状態管理のしやすさ」にあり、Go言語のプログラムをより効率的に書き進めるための大事な要素のひとつです。初めのうちは「どういうときに使うのか」が分かりにくく感じられるかもしれませんが、短い処理や一時的に使う動きを表現するときに使うと、自然と理解が深まっていきます。慣れてくれば、必要な場面で自然と手が動くようになるはずです。

サンプル:無名関数で簡単な処理をまとめる

以下は、無名関数を使って数値の計算とメッセージ表示をまとめてしまう例です。一時的にしか使わない処理を、その場で短く書けるのが無名関数の良いところです。


package main

import "fmt"

func main() {
    // 無名関数で計算処理をまとめる
    result := func(a int, b int) int {
        fmt.Println("計算を開始します")
        return a + b
    }(3, 7)

    fmt.Println("結果:", result)
}

このように、無名関数は「その場で計算して値を返す」という使い方も得意です。短く書けるうえに、どの処理がどこで実行されているのかが分かりやすくなるため、コードの読みやすさも向上します。

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

生徒

「無名関数って難しそうだと思っていましたが、実際には短い処理を書くだけならすごく便利なんですね。」

先生

「そうですね。特に即時実行や、変数に代入して何度も呼び出すといった使い方は、慣れると手放せなくなりますよ。」

生徒

「クロージャも面白かったです。外側の変数を覚えていてくれるって、なんだか不思議な感じがします。」

先生

「Go言語ではよく使われる仕組みなので、自然に身についていきますよ。無名関数は場面に応じて使い分けできる強い味方です。」

生徒

「これからのコードで積極的に使ってみます!」

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

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

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

Go言語の無名関数(匿名関数)とは何ですか?普通の関数との違いを初心者向けに教えてください。

Go言語の無名関数(匿名関数)とは、名前を付けずにその場で定義して使える関数のことです。通常の関数は名前を持ちますが、無名関数は名前が不要なため、一時的な処理を簡潔に書きたいときに便利です。コードの流れの中で直接関数を書けるので、短い処理をまとめたいときに役立ちます。
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinの例外処理とキャンセルの連携を完全ガイド!初心者でもわかるCoroutineExceptionHandlerの使い方
New2
Go言語
Go言語のクロージャとは?関数内関数の活用例と仕組み
New3
Swift
Swiftでエラー原因を可視化!ログとトレースのベストプラクティスを初心者向けに解説
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
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Kotlinのビルド設定エラーと解決法まとめ!初心者向けGradleトラブル対処ガイド
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
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方

💻 作業効率アップに

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

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

※ Amazon広告リンク