A linguagem de programação Go oferece suporte a funções anônimas que podem atuar como encerramentos de função. Funções anônimas são usadas quando queremos definir uma função embutida sem passar nenhum nome para ela.
Em nosso exemplo, criamos uma função getSequence () que retorna outra função. O objetivo desta função é fechar sobre uma variável i da função superior para formar um fechamento. Por exemplo -
package main
import "fmt"
func getSequence() func() int {
i:=0
return func() int {
i+=1
return i
}
}
func main(){
/* nextNumber is now a function with i as 0 */
nextNumber := getSequence()
/* invoke nextNumber to increase i by 1 and return the same */
fmt.Println(nextNumber())
fmt.Println(nextNumber())
fmt.Println(nextNumber())
/* create a new sequence and see the result, i is 0 again*/
nextNumber1 := getSequence()
fmt.Println(nextNumber1())
fmt.Println(nextNumber1())
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
1
2
3
1
2