Tópicos importantes de Go
Go Closures and Function Values
Functions are values in Go: store them, pass them, return them, and let them remember variables.
O que você vai aprender
- Functions as values
- Closures keep state
- Passing a function
next := counter()
1next()
2next()
3next()
A function that remembers
In Go a function is a value: you can store it in a variable, pass it to another function or return it. A closure is a function that keeps using variables from the place where it was created.
counter returns a function that remembers its own count between calls, and each call to counter creates a separate count. apply takes a function as a parameter. The function literal passed to apply reads bonus from main.
Pontos-chave
- counter returns a function with its own count.
- Each call to counter starts a new count.
- A function literal can use variables around it.
Exemplo executável de Go
main.go
package main
import "fmt"
func counter() func() int {
count := 0
return func() int {
count++
return count
}
}
func apply(values []int, transform func(int) int) []int {
result := make([]int, len(values))
for i, value := range values {
result[i] = transform(value)
}
return result
}
func main() {
next := counter()
fmt.Println(next(), next(), next())
other := counter() // a separate count
fmt.Println(other())
bonus := 10
fmt.Println(apply([]int{1, 2, 3}, func(n int) int { return n*2 + bonus }))
}
1 2 3
1
[12 14 16]Pratique
Abra o exemplo no compilador online, mude um valor ou adicione uma linha e tente prever a saída antes de executar. Depois quebre o código de propósito e leia a mensagem do compilador.
Terminou esta lição?
Marque como aprendida para acompanhar seu progresso.
Seu progresso está salvo neste navegador Entre para mantê-lo em todos os dispositivos.
Pratique com um desafio
Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.
- Ordenar por uma chave escolhida Ordene pessoas por nome ou por idade com um comparador escolhido em tempo de execução, quebrando empates de forma consistente. Fácil
- Assinantes de eventos Entregue eventos aos assinantes de cada tópico, no estilo observer, e conte o que cada pessoa recebe. Fácil