Go поддерживает анонимные функции, которые могут образовывать замыкания. Анонимные функции полезны, когда вы хотите определить встроенную функцию, не называя ее. |
|
package main
|
|
import "fmt"
|
|
Эта функция intSeq возвращает другую функцию, которую мы анонимно определяем в теле intSeq. Возвращенная функция присваивается в переменную i, чтобы сформировать замыкание. |
func intSeq() func() int {
i := 0
return func() int {
i++
return i
}
}
|
func main() {
|
|
Мы вызываем |
nextInt := intSeq()
|
Посмотрите, что происходит при вызове |
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
|
Чтобы подтвердить, что состояние является уникальным для этой конкретной функции, создайте и протестируйте новую. |
newInts := intSeq()
fmt.Println(newInts())
}
|
$ go run closures.go
1
2
3
1
|
|
Последняя особенность функций, которые мы сейчас рассмотрим, - это рекурсия. |
Следующий пример: Рекурсия (Recursion).