Sobes.tech
Middle

O que é um closure em Go?

sobes.tech IA

Resposta da IA

O encerramento em Go é uma função que "lembra" os valores do seu ambiente circundante, mesmo após a função exterior ter terminado. Isso permite capturar variáveis externas e usá-las dentro dela.

// Função exterior
func makeCounter() func() int {
    count := 0 // Variável que será capturada

    // Função interna (encerramento)
    return func() int {
        count++ // Captura e modifica count
        return count
    }
}

// Exemplo de uso
func main() {
    counter1 := makeCounter() // Cria o primeiro encerramento
    fmt.Println(counter1()) // Saída: 1
    fmt.Println(counter1()) // Saída: 2

    counter2 := makeCounter() // Cria um segundo encerramento (com seu próprio count)
    fmt.Println(counter2()) // Saída: 1
}