今回はgolangにおけるクロージャについて解説していきます。
目次
クロージャとは
Goには無名関数というものがあります。
無名関数は以下のplus変数に代入されているfunc()のように名前付きの識別子を持たない関数です。
func main() {
a := 0
plus := func() int {
a++
return a
}
fmt.Println(plus())
}
この実行結果は1です。
クロージャはこの無名関数を利用して作成します。
先ほどのコードでは変数aを他のコードで変更させてしまう危険性があります。クロージャはそれを排除するために関数作成時点の変数を閉じ込めることができます。
少し分かりにくいので実際にコードを見てみましょう。
func plus() (func() int) {
a := 0
return func() int {
a++
return a
}
}
func main() {
b := plus()
fmt.Println(b())
fmt.Println(b())
fmt.Println(b())
}
この実行結果は1 2 3
このように一回目のb()関数の実行が終わった後でもplus()関数のローカル変数であるaの値は保持され続けて、aの値が増加していきます。
クロージャは難易度が少し高めなわりには現場レベルではあまり使用されることは多くないので、こういうものがあるくらいで抑えておくとよいです。
golangをもっと詳しくなりたい方に
golang学習のために筆者が実際に受講したUdemy教材をまとめています。
golang学習のために筆者が実際に読んでおすすめしたい本をまとめています。
【入門】golangの学習におすすめの本/書籍7選
これから業務でgolangを使うことになった方、これからgolangを使ってキャリアを歩んでいきたいという方でどのように学習していこうか悩んでいる方もいるかと思います。 ...