Middle
O que é um closure em Go e como funciona?
sobes.tech IA
Resposta da IA
O encerramento em Go é uma função que "lembra" o valor das variáveis do seu ambiente léxico, mesmo após esse ambiente deixar de existir.
O princípio de funcionamento é o seguinte:
- Quando um encerramento é criado (por exemplo, dentro de outra função), ele captura referências às variáveis do escopo onde foi declarado.
- Essas variáveis capturadas permanecem vivas enquanto o encerramento existir, mesmo que a função onde foram declaradas já tenha terminado.
- A cada chamada do encerramento, ele pode acessar e modificar essas variáveis capturadas.
Exemplo:
package main
import "fmt"
func makeCounter() func() int {
count := 0 // Variável do ambiente externo
return func() int { // Este é um encerramento
count++ // Ele acessa e modifica `count`
return count
}
}
func main() {
counter1 := makeCounter()
fmt.Println(counter1()) // Imprime 1
fmt.Println(counter1()) // Imprime 2
counter2 := makeCounter() // Cria um novo encerramento com seu próprio `count`
fmt.Println(counter2()) // Imprime 1
}
Neste exemplo, a função makeCounter retorna uma função (encerramento). Este encerramento "captura" a variável count. Cada chamada à função retornada aumenta o valor de count, que pertence a essa instância específica do encerramento.