Go はレキシカルなクロージャもいける。
package main import "fmt"; func main() { count := 0; counter := func() int { count++; return count; }; repeat10(counter); } func repeat10(f func() int) { for i := 0; i < 10; i++ { fmt.Println(f()); } }
実行すると。
1 2 3 4 5 6 7 8 9 10