0Pricing
Go Academy · Lección

Construcción de una API flexible

Aplique el patrón

Construcción de una API flexible es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 3 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.

Aplique el patrón

Ahora ensamble el patrón completo: un constructor que recibe argumentos obligatorios y una lista variádica de opciones.

El constructor variádico

Los parámetros obligatorios van primero; después vienen las opciones como ...Option.

package main

import "fmt"

type Server struct {
	Host string
	Port int
}
type Option func(*Server)

func WithPort(p int) Option { return func(s *Server) { s.Port = p } }

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, opt := range opts {
		opt(s)
	}
	return s
}

func main() {
	s := NewServer("localhost", WithPort(8080))
	fmt.Printf("%+v\n", *s)
}

Llamar sin opciones

Como las opciones son variádicas, puede omitirlas por completo y confiar en la configuración que prepare el constructor.

package main

import "fmt"

type Server struct{ Host string; Port int }
type Option func(*Server)

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, o := range opts { o(s) }
	return s
}

func main() {
	s := NewServer("localhost")
	fmt.Printf("%+v\n", *s)
}

Llamar con varias opciones

Apile tantas opciones como quiera; cada una se lee claramente en el sitio de llamada.

package main

import "fmt"

type Server struct {
	Host    string
	Port    int
	Timeout int
	TLS     bool
}
type Option func(*Server)

func WithPort(p int) Option    { return func(s *Server) { s.Port = p } }
func WithTimeout(t int) Option { return func(s *Server) { s.Timeout = t } }
func WithTLS() Option          { return func(s *Server) { s.TLS = true } }

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, o := range opts { o(s) }
	return s
}

func main() {
	s := NewServer("localhost", WithPort(9000), WithTimeout(60), WithTLS())
	fmt.Printf("%+v\n", *s)
}

Llamadas autoexplicativas

Compare NewServer("localhost", WithPort(9000), WithTLS()) con una llamada posicional. La intención es evidente sin tener que consultar la firma.

Añadir opciones más adelante

¿Necesita un ajuste nuevo? Añada una función WithX. Todos los sitios de llamada existentes seguirán compilándose sin cambios: verdadera compatibilidad con versiones anteriores.

package main

import "fmt"

type Server struct{ Host string; Retries int }
type Option func(*Server)

func WithRetries(n int) Option { return func(s *Server) { s.Retries = n } }

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, o := range opts { o(s) }
	return s
}

func main() {
	fmt.Printf("%+v\n", *NewServer("h", WithRetries(5)))
}

Pasar opciones entre componentes

Como las opciones son valores, puede crear un slice en otro lugar y pasarlo al constructor.

package main

import "fmt"

type Server struct{ Host string; Port int }
type Option func(*Server)

func WithPort(p int) Option { return func(s *Server) { s.Port = p } }

func NewServer(host string, opts ...Option) *Server {
	s := &Server{Host: host}
	for _, o := range opts { o(s) }
	return s
}

func main() {
	common := []Option{WithPort(443)}
	s := NewServer("api", common...)
	fmt.Printf("%+v\n", *s)
}

Las opciones como API pública

Exporte el tipo Option y las funciones WithX para que los usuarios de la biblioteca puedan configurar su tipo sin tocar sus elementos internos.

Mantener privados los campos

Los campos de configuración pueden permanecer sin exportar; las opciones son la única forma autorizada de establecerlos, lo que protege las invariantes.

Cuándo destaca el patrón

  • Constructores de bibliotecas con muchos ajustes opcionales
  • API que deben mantenerse estables a medida que crecen
  • Clientes, servidores, registradores y builders

Ecos del estándar de la biblioteca

Verá este estilo en todo el ecosistema de Go, incluido gRPC y muchos drivers. Reconocerlo hará que esas API le resulten familiares.

Comprobación rápida

Compruebe sus conocimientos sobre las API flexibles.

Repaso

Ha creado una API flexible con opciones funcionales.

  • Primero los argumentos obligatorios y después ...Option
  • Recorra las opciones aplicando cada una
  • Las llamadas pueden pasar cero opciones o muchas, y se leen con claridad
  • Añada opciones más adelante sin romper las llamadas existentes

Preguntas frecuentes

¿La lección «Construcción de una API flexible» es gratis?

Sí — el texto completo de «Construcción de una API flexible» 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 «Construcción de una API flexible»?

Aplique el patrón 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 3 de 4.

¿Cuánto tiempo toma la lección «Construcción de una API flexible»?

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