0Pricing
Go Academy · Aula

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 WithX retornam 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.

Todas as aulas deste curso

  1. O problema de muitos parâmetros
  2. Funções de opções
  3. Construção de uma API flexível
  4. Padrões e validação
← Voltar para Go Academy