Funções de opções
Configure com funções
Funções de opções é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.
Configure com funções
A ideia central é representar cada configuração opcional como uma função que altera uma configuração. Essas são as "funções de opção".
O tipo de opção
Defina uma Option como uma função que recebe um ponteiro para a estrutura de configuração.
package main
import "fmt"
type Config struct {
Port int
Timeout int
}
type Option func(*Config)
func main() {
var o Option
fmt.Println(o == nil)
}Escrevendo uma opção
Uma opção retorna um fechamento que define um campo. WithPort(9000) produz uma função que atribui Port = 9000.
package main
import "fmt"
type Config struct{ Port int }
type Option func(*Config)
func WithPort(p int) Option {
return func(c *Config) { c.Port = p }
}
func main() {
c := &Config{}
WithPort(9000)(c)
fmt.Println(c.Port)
}Os fechamentos capturam o valor
A função retornada fecha sobre o argumento. WithPort(9000) se lembra de 9000 até ser aplicada posteriormente.
Várias opções
Cada configuração recebe sua própria função de opção. Todas compartilham o tipo Option.
package main
import "fmt"
type Config struct {
Port int
Timeout int
}
type Option func(*Config)
func WithPort(p int) Option { return func(c *Config) { c.Port = p } }
func WithTimeout(t int) Option { return func(c *Config) { c.Timeout = t } }
func main() {
c := &Config{}
WithPort(80)(c)
WithTimeout(15)(c)
fmt.Printf("%+v\n", *c)
}Opções de sinalizador booleano
Uma opção sem parâmetros pode alternar um sinalizador.
package main
import "fmt"
type Config struct{ TLS bool }
type Option func(*Config)
func WithTLS() Option { return func(c *Config) { c.TLS = true } }
func main() {
c := &Config{}
WithTLS()(c)
fmt.Println(c.TLS)
}Aplicando uma fatia de opções
Reúna as opções em uma fatia e aplique cada uma em um laço — esse é o núcleo do construtor que você desenvolverá em seguida.
package main
import "fmt"
type Config struct{ Port, Timeout int }
type Option func(*Config)
func WithPort(p int) Option { return func(c *Config) { c.Port = p } }
func WithTimeout(t int) Option { return func(c *Config) { c.Timeout = t } }
func main() {
c := &Config{}
opts := []Option{WithPort(8080), WithTimeout(30)}
for _, opt := range opts {
opt(c)
}
fmt.Printf("%+v\n", *c)
}A ordem importa
As opções são aplicadas em ordem. Se duas opções definirem o mesmo campo, a última vencerá — às vezes isso é útil, mas às vezes é uma armadilha que precisa ser documentada.
Convenção de nomenclatura
Por convenção, os construtores de opções recebem nomes With..., como WithPort e WithTLS, para que os pontos de chamada pareçam uma frase em inglês.
As opções podem conter lógica
Uma opção é apenas uma função, portanto pode validar, calcular ou combinar valores — não apenas atribuí-los.
Por que as funções superam as estruturas aqui
- Definem apenas os campos mencionados
- Têm nomes autoexplicativos no ponto de chamada
- Permitem adicionar novas opções sem quebrar os pontos de chamada
Verificação rápida
Teste seus conhecimentos sobre funções de opção.
Recapitulação
Você aprendeu a criar funções de opção.
- Defina
type Option func(*Config) - Os construtores
WithXretornam fechamentos que alteram a configuração - Aplique uma fatia de opções em um laço
- A ordem importa; a última escrita vence
Perguntas Frequentes
A aula “Funções de opções” é grátis?
Sim — o texto completo de “Funções de opções” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.
O que vou aprender em “Funções de opções”?
Configure com funções Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Go Academy?
Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Funções de opções”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Go Academy?
Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.