Goのクロージャ(他の言語でもありますよね)について、よく理解できていなかったので調べてみた
クロージャとは
クロージャ(クロージャー、英語: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数にて利用可能な機能・概念である。引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。
うーん...
簡単に言うと、「ローカル変数を参照している関数内の関数」ってこと...?
main.go
package main
import "fmt"
func add() func() int {
n := 0
return func() int {
n++
return n
}
}
func main() {
a := add()
fmt.Println(a())
}
クロージャを使わない場合、グローバル変数を用意したりする必要があるので、クロージャを使いなれておくと便利らしい