Vinculación con structs
Deserialice la configuración
Vinculación con structs 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.
De claves sueltas a un struct
Llamar a GetString en todas partes dispersa claves de tipo string por el código. La deserialización de la configuración en un struct tipado le proporciona nombres de campos comprobados en tiempo de compilación y un único lugar donde consultar la estructura.
Definir un struct de configuración
Declare un struct cuyos campos incluyan tags mapstructure para que Viper sepa qué clave de configuración corresponde a cada campo. Después de cada campo se coloca un tag como mapstructure:"host", escrito entre comillas graves en el código fuente real de Go.
type ServerConfig struct {
Host string // tag: mapstructure host
Port int // tag: mapstructure port
}
type Config struct {
Server ServerConfig // tag: mapstructure server
Debug bool // tag: mapstructure debug
}Llamar a Unmarshal
Después de leer la configuración, decodifíquela en su struct:
var cfg Config
if err := viper.Unmarshal(&cfg); err != nil {
log.Fatalf("unable to decode config: %v", err)
}
fmt.Println(cfg.Server.Port)Por qué mapstructure y no json
Viper utiliza la biblioteca mapstructure porque la configuración puede proceder de muchos formatos, como YAML, variables de entorno y TOML, no solo de JSON. El tag mapstructure es independiente del formato y decodifica a partir de un map genérico.
Deserializar un único subárbol
Puede decodificar una sola sección con UnmarshalKey:
var sc ServerConfig
viper.UnmarshalKey("server", &sc)
fmt.Println(sc.Host, sc.Port)Campos anidados y slices
mapstructure gestiona automáticamente las estructuras anidadas y los slices:
- Los structs anidados se asignan a secciones de configuración anidadas
- Un campo
[]stringse asigna a un array de YAML o JSON
Un campo slice incluiría un tag mapstructure:"hosts" (escrito entre comillas graves en el código fuente real).
type Config struct {
Hosts []string // tag: mapstructure hosts
}Valores predeterminados de los campos
Si falta una clave y no establece ningún valor predeterminado, el campo toma el valor cero de Go: 0, una cadena vacía o false. Combine la vinculación del struct con SetDefault para garantizar valores sensatos.
Validar el struct decodificado
Después de deserializar, valide el resultado. Un patrón habitual consiste en un método Validate() que devuelve un error para combinaciones imposibles, como un puerto 0 o un host vacío.
func (c Config) Validate() error {
if c.Server.Port == 0 {
return fmt.Errorf("server.port is required")
}
return nil
}Los errores de decodificación son tipados
Si un valor no puede ajustarse al tipo del campo (por ejemplo, una cadena cuando se espera un int), la decodificación devuelve un error que describe el campo. Compruébelo siempre y muéstrelo en lugar de ignorarlo.
La misma idea con encoding/json
La biblioteca estándar puede decodificar JSON de la misma manera. Con etiquetas de struct explícitas, rellena campos tipados; con un mapa, le proporciona acceso genérico. El programa ejecutable de abajo usa un mapa anidado para que pueda ejecutarlo sin etiquetas de struct.
Ejecutable: decodificación de una configuración anidada
Este programa independiente decodifica una configuración JSON anidada en un mapa genérico y lee los campos anidados, de forma similar a como Unmarshal rellena un struct.
package main
import (
"encoding/json"
"fmt"
)
func main() {
raw := "{\"server\":{\"host\":\"localhost\",\"port\":8080},\"debug\":true}"
var c map[string]any
if err := json.Unmarshal([]byte(raw), &c); err != nil {
panic(err)
}
srv := c["server"].(map[string]any)
fmt.Printf("%v:%v debug=%v\n", srv["host"], srv["port"], c["debug"])
}Comprobación rápida
Compruebe lo que ha aprendido sobre la vinculación de la configuración con structs.
Resumen
Ha aprendido a vincular la configuración con structs:
- Use etiquetas
mapstructureyviper.Unmarshal(&cfg) UnmarshalKeydecodifica un único subárbol- Los structs y slices anidados se decodifican automáticamente
- Añada un método
Validate()para detectar pronto las combinaciones incorrectas
Preguntas frecuentes
¿La lección «Vinculación con structs» es gratis?
Sí — el texto completo de «Vinculación con structs» 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 «Vinculación con structs»?
Deserialice la configuració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 4 de 4.
¿Cuánto tiempo toma la lección «Vinculación con structs»?
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
- Lectura de archivos de configuración
- Variables de entorno
- Valores predeterminados y supervisión
- Vinculación con structs