Qual é o resultado de atribuir um valor a uma variável usando a construção defer, quando seu valor é definido dentro de uma função?
sobes.tech IA
Resposta da IA
No Go, a palavra-chave defer adia a execução de uma função até ao momento em que a função envolvente termina. Os argumentos da função passada para defer são avaliados imediatamente no momento da declaração de defer, não na sua execução.
Se uma variável for usada dentro da função chamada através de defer, o valor da variável será aquele que tinha no momento da declaração de defer, se for passado como argumento. Se a variável for usada diretamente (por exemplo, através de um encerramento), será usado o seu valor atual no momento da execução da função diferida.
Exemplo:
func exemplo() {
x := 1
defer fmt.Println(x) // x será 1, pois o argumento é avaliado imediatamente
x = 2
}
// Ao chamar exemplo(), será exibido: 1
Se usar um encerramento:
func exemplo() {
x := 1
defer func() { fmt.Println(x) }() // a função será chamada ao sair, x será 2
x = 2
}
// Ao chamar exemplo(), será exibido: 2
Assim, o resultado da atribuição à variável em defer depende de como a variável é usada — como argumento de função ou através de um encerramento.