0Pricing
Go Academy · Lección

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 WithX devuelven 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

  1. El problema de demasiados parámetros
  2. Funciones de opciones
  3. Construcción de una API flexible
  4. Valores predeterminados y validación
← Volver a Go Academy