0Pricing
Go Academy · Lección

Valores predeterminados y supervisión

Establezca valores predeterminados y recargue en caliente

Valores predeterminados y supervisión 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.

Valores predeterminados sensatos

Un buen sistema de configuración funciona incluso cuando no se ha establecido nada. Los valores predeterminados proporcionan un valor alternativo para cada clave, de modo que el programa nunca se bloquee por la ausencia de un valor.

Viper ofrece SetDefault para esto, y se sitúa en el nivel más bajo de la cadena de precedencia.

Establecer valores predeterminados

Registre los valores predeterminados antes de leer el archivo. Cualquier fuente, como el archivo, el entorno o un flag, los sobrescribe.

viper.SetDefault("port", 8080)
viper.SetDefault("logLevel", "info")
fmt.Println(viper.GetInt("port"))

Por qué ayudan los valores predeterminados

Los valores predeterminados reducen el tamaño de los archivos de configuración: el equipo de operaciones solo sobrescribe lo que difiere de la norma. También documentan directamente en el código la estructura esperada de la configuración.

Recarga en caliente con WatchConfig

A veces querrá que los cambios de configuración surtan efecto sin reiniciar. viper.WatchConfig() observa los cambios del archivo mediante fsnotify.

viper.WatchConfig()

Reaccionar a los cambios

Registre una función de callback para que se ejecute cuando cambie el archivo:

viper.OnConfigChange(func(e fsnotify.Event) {
    fmt.Println("config changed:", e.Name)
})
viper.WatchConfig()

Para qué sirve la recarga en caliente

La recarga en caliente resulta especialmente útil para valores que se pueden cambiar de forma segura mientras el programa está en ejecución:

  • Verbosidad de los logs
  • Feature flags
  • Límites de tasa

Evite recargar en caliente elementos como el puerto de escucha o el DSN de la base de datos, que normalmente requieren un reinicio.

Consideración sobre la seguridad de los hilos

Cuando la configuración puede cambiar durante la ejecución, varias goroutines pueden leerla. Los getters de Viper se pueden llamar de forma concurrente sin riesgos, pero si almacena los valores en sus propias variables, protéjalas con un mutex o un valor atómico.

var cfg atomic.Value // stores a Config struct
cfg.Store(loadConfig())

Modelar valores predeterminados sin Viper

Puede expresar la misma idea de asignación de valores predeterminados en Go puro: una función que devuelve el valor si está presente y, en caso contrario, un valor alternativo.

func intOr(m map[string]int, key string, def int) int {
    if v, ok := m[key]; ok {
        return v
    }
    return def
}

Validación después de la recarga

Valide siempre la configuración después de recargarla y antes de aplicarla. Un error tipográfico en el archivo debe conservar la configuración anterior válida, no bloquear el servicio en ejecución. Registre el error y siga atendiendo solicitudes.

newCfg, err := load()
if err != nil {
    log.Println("bad config, keeping current:", err)
    return
}
current.Store(newCfg)

Simular una recarga

Conceptualmente, una recarga vuelve a leer la fuente e intercambia la configuración activa. El observador solo activa ese intercambio cuando cambia el mtime del archivo. La siguiente demostración ejecutable muestra cómo cambia el valor.

Ejecutable: valores predeterminados y recarga

Este programa autónomo muestra la lógica de asignación de valores predeterminados y, después, una recarga simulada que cambia un valor.

package main

import "fmt"

func get(m map[string]int, k string, def int) int {
    if v, ok := m[k]; ok {
        return v
    }
    return def
}

func main() {
    cfg := map[string]int{}
    fmt.Println("port (default):", get(cfg, "port", 8080))
    cfg["port"] = 9090 // simulated reload
    fmt.Println("port (reloaded):", get(cfg, "port", 8080))
}

Comprobación rápida

Ponga a prueba sus conocimientos sobre valores predeterminados y observación de cambios.

Resumen

Ha aprendido sobre valores predeterminados y recarga en caliente:

  • SetDefault proporciona valores alternativos con la menor precedencia
  • WatchConfig y OnConfigChange permiten recargas en caliente
  • Recargue en caliente únicamente los valores que sea seguro cambiar durante la ejecución
  • Proteja la configuración almacenada en caché con valores atómicos o mutexes y valídela antes de aplicarla

Preguntas frecuentes

¿La lección «Valores predeterminados y supervisión» es gratis?

Sí — el texto completo de «Valores predeterminados y supervisió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 supervisión»?

Establezca valores predeterminados y recargue en caliente 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 «Valores predeterminados y supervisió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

  1. Lectura de archivos de configuración
  2. Variables de entorno
  3. Valores predeterminados y supervisión
  4. Vinculación con structs
← Volver a Go Academy