Go suporta funções anônimas, as quais podem formar closures. Funções anônimas são úteis quando se pretende definir a função em linha sem ser necessário nomeá-la. |
|
package main |
|
import "fmt" |
|
Esta função |
func intSeq() func() int { i := 0 return func() int { i++ return i } } |
func main() { |
|
Aqui, a execução da função |
nextInt := intSeq() |
Veja o efeito do closure chamando |
fmt.Println(nextInt()) fmt.Println(nextInt()) fmt.Println(nextInt()) |
Para confirmar que o estado é único àquela variável específica, ao criar outra e testar, o resultado é diverso. |
newInts := intSeq() fmt.Println(newInts()) } |
$ go run closures.go 1 2 3 1 |
|
O último recurso de funções a ser apresentado é a recursão. |
Próximo exemplo: Recursion.