Go言語の無名関数(匿名関数)の書き方と基本的な使い方
生徒
「Go言語を勉強していたら、無名関数(匿名関数)という言葉が出てきたのですが、これは何ですか?」
先生
「いい質問ですね。Go言語では、関数に名前をつけずに、その場で定義して使うことができるんです。それが無名関数(匿名関数)です。」
生徒
「名前をつけない関数って、どんなときに使うんですか?」
先生
「では、Go言語における無名関数の基本的な使い方を、これから一緒に見ていきましょう!」
1. 無名関数(匿名関数)とは?
Go言語(Golang)では、名前をつけずにその場で動作をまとめられる関数を定義できます。これが無名関数(匿名関数)です。通常の関数のように名前を用意しなくてもよいため、小さな処理を手早く書きたいときに役立ちます。
たとえば「ちょっとした計算を一度だけ実行したい」「画面にメッセージを出すだけの短い処理を書きたい」といった場面では、無名関数を使うことでコードがスッキリし、読みやすくなります。
初心者の方でも分かりやすい例として、次のような “あいさつを一回だけ実行する” 無名関数があります。
package main
import "fmt"
func main() {
func() {
fmt.Println("はじめまして!これは無名関数の簡単な例です。")
}()
}
このように、無名関数は「名前をつけるほどではない短い動き」をその場で表現する場面にぴったりです。最初は少し不思議に感じるかもしれませんが、慣れてくると自然に使いこなせるようになります。
2. 無名関数の基本構文
ここでは、Go言語で無名関数(匿名関数)を書くときの基本的な形を確認しておきましょう。まずは「形」に慣れることが大事なので、シンプルなサンプルコードをひとつずつ眺めていくイメージで読んでみてください。
func() {
fmt.Println("これは無名関数です")
}()
無名関数の基本構文は、上の例のように「func から始まり、丸かっこ、波かっこ、最後にもう一度丸かっこ」が付く形になります。
func()の部分で「無名の関数」を宣言しています。{ ... }の中に、実際に行いたい処理を書きます。- 最後の
()が「この関数をその場で実行する」という合図になります。
つまり、この1つのかたまり全体で「関数の定義」と「関数の実行」を同時に行っているイメージです。通常の関数だと、まず関数を定義してから、別の場所でその関数名を呼び出しますが、無名関数ではそれを一度に済ませることができます。
もう少しイメージしやすくするために、「あいさつのメッセージだけを一回表示する」という、とても単純な例をもう一度見てみましょう。
package main
import "fmt"
func main() {
// 無名関数を定義して、その場で実行する
func() {
fmt.Println("こんにちは!無名関数の基本構文を学習中です。")
}()
}
このコードを実行すると、画面には「あいさつの文章」が一度だけ表示されます。ここでポイントになるのは、わざわざ別に関数名を考えなくても、「この場所でこれだけの処理をしたい」という意図をそのまま書けているという点です。短い処理をまとめて書きたいときや、一時的なメッセージ表示を行いたいときなどに、無名関数の基本構文を知っていると、自然に使いどころが見えてくるようになります。
3. 実際の実行例を見てみよう
Go言語で無名関数を実際に使った簡単な例を見てみましょう。
package main
import "fmt"
func main() {
func() {
fmt.Println("Hello, 無名関数!")
}()
}
このコードを実行すると、次のような出力が表示されます。
Hello, 無名関数!
4. 無名関数に引数を渡すには?
無名関数にも引数を渡すことができます。普通の関数と同じように、引数を定義し、呼び出し時に値を渡します。
package main
import "fmt"
func main() {
func(name string) {
fmt.Println("こんにちは、" + name + "さん!")
}("太郎")
}
このコードの出力は次のようになります。
こんにちは、太郎さん!
ポイント:引数の定義はfunc(name string)のように行い、呼び出すときはその直後の("太郎")で渡します。
5. 無名関数を変数に代入することもできる
無名関数は、そのまま変数に代入して、あとで呼び出すこともできます。
package main
import "fmt"
func main() {
greet := func(name string) {
fmt.Println("ようこそ、" + name + "さん!")
}
greet("花子")
greet("一郎")
}
出力は次のようになります。
ようこそ、花子さん!
ようこそ、一郎さん!
このように、無名関数を変数に入れて再利用することも可能です。
6. 無名関数とクロージャ
Go言語では、無名関数を使ってクロージャという機能を使うこともできます。クロージャとは、外側の変数にアクセスできる関数のことです。
package main
import "fmt"
func main() {
count := 0
increment := func() {
count++
fmt.Println("カウント:", count)
}
increment()
increment()
}
このコードでは、無名関数がcountという外の変数にアクセスして、値を更新しています。
カウント: 1
カウント: 2
このように、無名関数を使えば、プログラムの中で変数を閉じ込めて管理することができます。
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言語の無名関数(匿名関数)とは、名前を付けずにその場で定義して使える関数のことです。通常の関数は名前を持ちますが、無名関数は名前が不要なため、一時的な処理を簡潔に書きたいときに便利です。コードの流れの中で直接関数を書けるので、短い処理をまとめたいときに役立ちます。
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!