Aula 16 – Tutorial Golang – Closure
Aula 16 – Tutorial Golang – Closure
Página principal do blog
Todas as aulas desse curso
Aula 15 Aula 17
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Esse é o link do código fluente no Pinterest
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
Melhore seu NETWORKING
https://digitalinnovation.one/
Participe de comunidades de desenvolvedores:
Fiquem a vontade para me adicionar ao linkedin.
E também para me seguir no https://github.com/toticavalcanti.
Código final da aula:
https://github.com/toticavalcanti
Toti:
https://www.youtube.com/channel/UCUEtjLuDpcOvR3mIUr-viOA
Backing track / Play-along:
https://www.youtube.com/channel/UCT3TryVMqTqYBjf5g5WAHfA
Código Fluente
https://www.youtube.com/channel/UCgn-O-88XBAwdG9gUWkkb0w
Putz!
https://www.youtube.com/channel/UCZXop2-CECwyFYmHbhnAkAw
Aula 16 – Tutorial Golang – Closure
Closure
Go oferece suporte a funções anônimas, que podem formar closures.
As funções anônimas são úteis quando você deseja definir uma função embutida sem precisar nomeá-la, você pode atribuir a uma variável, independentemente de haver um nome para a função.
Podemos passá-la como se fosse um objeto qualquer, que você pode atribuir a uma variável.
Esta função intSeq() retorna outra função que definimos anonimamente no corpo de intSeq().
A função retornada soma 1 variável i, a cada vez que é chamada, a função anônima, ou seja, a closure, é a parte em azul no código abaixo.
func intSeq() func() int {
i := 0
return func() int {
i++
return i
}
}
A gente chama a intSeq(), atribuindo o resultado (uma função) a variável nextInt.
nextInt := intSeq()
Este valor de função captura seu próprio valor de i, que será atualizado cada vez que chamarmos nextInt().
fmt.Println("nextInt chamada", nextInt())
fmt.Println("nextInt chamada", nextInt())
fmt.Println("nextInt chamada", nextInt())
Saída:
nextInt chamada 1
nextInt chamada 2
nextInt chamada 3
Para confirmar que o estado é exclusivo para aquela função específica, crie e teste um novo em uma nova variável chamada newInts.
newInts := intSeq()
fmt.Println("newInts chamada", newInts())
Saída:
newInts chamada 1
Na próxima aula veremos o último recurso de funções que é a recursão.
Código completo
package main
import "fmt"
func intSeq() func() int {
i := 0
return func() int {
i++
return i
}
}
func main() {
nextInt := intSeq()
fmt.Println("nextInt chamada", nextInt())
fmt.Println("nextInt chamada", nextInt())
fmt.Println("nextInt chamada", nextInt())
fmt.Println()
newInts := intSeq()
fmt.Println("newInts chamada", newInts())
}
E pra executar é só entrar na pasta onde tá o arquivo closure.go e digitar:
go run closure.go