Funciones de opciones
Configure mediante funciones
Funciones de opciones es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.
Configure con funciones
La idea central es representar cada ajuste opcional como una función que modifica una configuración. Estas son las «funciones de opción».
El tipo Option
Defina Option como una función que recibe un puntero a la struct de configuración.
package main
import "fmt"
type Config struct {
Port int
Timeout int
}
type Option func(*Config)
func main() {
var o Option
fmt.Println(o == nil)
}Escribir una opción
Una opción devuelve un cierre que establece un campo. WithPort(9000) produce una función que asigna 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)
}Los cierres capturan el valor
La función devuelta captura el argumento. WithPort(9000) recuerda el valor 9000 hasta que se aplica más adelante.
Varias opciones
Cada ajuste tiene su propia función de opción. Todas comparten el 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)
}Opciones de tipo indicador booleano
Una opción sin parámetros puede activar o desactivar un indicador.
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)
}Aplicar un slice de opciones
Recopile las opciones en un slice y aplique cada una en un bucle: ese es el núcleo del constructor que creará a continuación.
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)
}El orden importa
Las opciones se aplican en orden. Si dos opciones establecen el mismo campo, prevalece la última; a veces resulta útil, pero en otras ocasiones puede provocar errores si no se documenta.
Convención de nombres
Por convención, los constructores de opciones se nombran With..., por ejemplo, WithPort y WithTLS, para que los sitios de llamada se lean como inglés.
Las opciones pueden contener lógica
Una opción no es más que una función, por lo que puede validar, calcular o combinar valores; no tiene por qué limitarse a asignarlos.
Por qué aquí las funciones son mejores que las structs
- Solo establecen los campos que menciona
- Usan nombres autoexplicativos en el sitio de llamada
- Permiten añadir opciones nuevas sin romper las llamadas existentes
Comprobación rápida
Compruebe sus conocimientos sobre las funciones de opción.
Repaso
Ha aprendido a crear funciones de opción.
- Defina
type Option func(*Config) - Los constructores
WithXdevuelven cierres que modifican la configuración - Aplique un slice de opciones en un bucle
- El orden importa: prevalece la última escritura
Preguntas frecuentes
¿La lección «Funciones de opciones» es gratis?
Sí — el texto completo de «Funciones de opciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Funciones de opciones»?
Configure mediante funciones Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Go Academy?
No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Funciones de opciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Go Academy?
Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- El problema de demasiados parámetros
- Funciones de opciones
- Construcción de una API flexible
- Valores predeterminados y validación