Valores predeterminados y validación
Establezca valores predeterminados razonables
Valores predeterminados y validación es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 4 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.
Establezca valores predeterminados razonables
Un constructor sólido parte de buenos valores predeterminados y después permite que las opciones los sobrescriban. Así evita por completo la trampa del valor cero.
Inicialice antes de aplicar
Construya la configuración con los valores predeterminados primero y, después, aplique las opciones sobre ella.
package main
import "fmt"
type Server struct {
Port int
Timeout int
}
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.Port = p } }
func NewServer(opts ...Option) *Server {
s := &Server{Port: 8080, Timeout: 30}
for _, o := range opts { o(s) }
return s
}
func main() {
fmt.Printf("%+v\n", *NewServer())
fmt.Printf("%+v\n", *NewServer(WithPort(9000)))
}Los valores predeterminados prevalecen hasta que se sobrescriben
Una llamada sin opciones produce los valores predeterminados; una opción reemplaza solo el campo que modifica. Lo mejor de ambos enfoques.
Validar después de aplicar
Después de aplicar las opciones, valide la configuración final y devuelva un error si no es válida. Haga que el constructor devuelva (*T, error).
package main
import (
"errors"
"fmt"
)
type Server struct{ Port int }
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.Port = p } }
func NewServer(opts ...Option) (*Server, error) {
s := &Server{Port: 8080}
for _, o := range opts { o(s) }
if s.Port < 1 || s.Port > 65535 {
return nil, errors.New("invalid port")
}
return s, nil
}
func main() {
_, err := NewServer(WithPort(99999))
fmt.Println(err)
}Validación dentro de las opciones
Como alternativa, las propias opciones pueden devolver un error. El tipo Option pasa a ser func(*Config) error.
package main
import (
"errors"
"fmt"
)
type Server struct{ Port int }
type Option func(*Server) error
func WithPort(p int) Option {
return func(s *Server) error {
if p < 1 {
return errors.New("port must be positive")
}
s.Port = p
return nil
}
}
func NewServer(opts ...Option) (*Server, error) {
s := &Server{Port: 8080}
for _, o := range opts {
if err := o(s); err != nil {
return nil, err
}
}
return s, nil
}
func main() {
_, err := NewServer(WithPort(-1))
fmt.Println(err)
}Qué estilo de validación elegir
Valide en las opciones las comprobaciones específicas de cada ajuste; valide después de aplicarlas las reglas que relacionan varios campos, por ejemplo, que TLS requiera una ruta de certificado. A menudo se utilizan ambos enfoques.
Documentar los valores predeterminados
Documente siempre cada valor predeterminado en el comentario de documentación del constructor para que los usuarios sepan qué obtendrán al omitir una opción.
Obligatorio frente a opcional
Mantenga los valores realmente obligatorios como parámetros posicionales y reserve las opciones para los valores verdaderamente opcionales. No oculte datos obligatorios detrás de una opción.
package main
import "fmt"
type Client struct {
BaseURL string
Retries int
}
type Option func(*Client)
func WithRetries(n int) Option { return func(c *Client) { c.Retries = n } }
func NewClient(baseURL string, opts ...Option) *Client {
c := &Client{BaseURL: baseURL, Retries: 3}
for _, o := range opts { o(c) }
return c
}
func main() {
fmt.Printf("%+v\n", *NewClient("https://api"))
}Combinar opciones
Puede componer varias opciones en un único preset para las configuraciones habituales.
package main
import "fmt"
type Server struct{ Port, Timeout int }
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 Production() Option {
return func(s *Server) {
WithPort(443)(s)
WithTimeout(60)(s)
}
}
func NewServer(opts ...Option) *Server {
s := &Server{Port: 8080, Timeout: 30}
for _, o := range opts { o(s) }
return s
}
func main() {
fmt.Printf("%+v\n", *NewServer(Production()))
}Prácticas recomendadas
- Parta de los valores predeterminados y después aplique las opciones
- Valide después de aplicar las opciones las reglas que relacionan varios campos
- Mantenga los valores obligatorios como parámetros posicionales
- Documente todos los valores predeterminados
Una API completa y sólida
Combinar valores predeterminados, opciones y validación le proporciona un constructor flexible, seguro, autoexplicativo y fácil de ampliar.
Comprobación rápida
Compruebe sus conocimientos sobre valores predeterminados y validación.
Repaso
Ha completado el patrón de opciones funcionales.
- Establezca los valores predeterminados antes de aplicar las opciones
- Valide después de aplicar las opciones o dentro de ellas para las comprobaciones específicas de cada campo
- Mantenga los valores obligatorios como parámetros posicionales
- Componga opciones en presets y documente los valores predeterminados
Preguntas frecuentes
¿La lección «Valores predeterminados y validación» es gratis?
Sí — el texto completo de «Valores predeterminados y validación» 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 «Valores predeterminados y validación»?
Establezca valores predeterminados razonables 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 4 de 4.
¿Cuánto tiempo toma la lección «Valores predeterminados y validación»?
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