Variables de entorno
Anule la configuración desde el entorno
Variables de entorno 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.
Por qué usar variables de entorno
La metodología de la aplicación de doce factores recomienda almacenar la configuración en el entorno. Las variables de entorno permiten que el mismo binario se comporte de forma distinta en desarrollo, staging y producción sin editar archivos.
Viper puede superponer variables de entorno a la configuración del archivo.
Orden de precedencia
Viper resuelve una clave comprobando las fuentes en orden de prioridad (de mayor a menor):
- Llamadas explícitas a
Set - Flags
- Variables de entorno
- Archivo de configuración
- Valores predeterminados
Por lo tanto, una variable de entorno prevalece sobre el archivo, pero pierde frente a una llamada explícita a Set.
Activar la compatibilidad con variables de entorno
viper.AutomaticEnv() indica a Viper que compruebe las variables de entorno para cualquier clave que solicite. Después de esto, viper.GetString("port") consultará la variable de entorno PORT.
viper.AutomaticEnv()
port := viper.GetString("port")Añadir un prefijo
Para evitar conflictos con variables de entorno no relacionadas, establezca un prefijo:
viper.SetEnvPrefix("myapp")- Ahora la clave
portse asigna a la variable de entornoMYAPP_PORT
Viper convierte la clave a mayúsculas y antepone el prefijo con un guion bajo.
viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetString("port")) // reads MYAPP_PORTGestionar claves anidadas
Las variables de entorno no pueden contener puntos. Use un reemplazador de claves para convertir las claves separadas por puntos en claves separadas por guiones bajos, de modo que server.port se convierta en SERVER_PORT.
replacer := strings.NewReplacer(".", "_")
viper.SetEnvKeyReplacer(replacer)
viper.AutomaticEnv()
// server.port -> SERVER_PORTVincular una única variable
En lugar del modo automático, puede vincular explícitamente una clave con viper.BindEnv. Esto resulta útil cuando el nombre de la variable de entorno no sigue la convención del prefijo.
viper.BindEnv("id", "ACCOUNT_ID")
fmt.Println(viper.GetString("id"))El paquete os de la biblioteca estándar
Internamente, esto lee el entorno del proceso, expuesto por la biblioteca estándar mediante os.Getenv y os.LookupEnv.
os.Getenvdevuelve una cadena vacía si la variable no está definidaos.LookupEnvdevuelve un segundo valor booleano que indica si estaba presente
val, ok := os.LookupEnv("PORT")
if !ok {
val = "8080" // default
}Establecer variables de entorno en Go
Puede establecer variables de entorno mediante programación para pruebas o valores predeterminados con os.Setenv. Esto es exactamente lo que utilizaremos a continuación para demostrar el comportamiento de sobrescritura.
os.Setenv("MYAPP_PORT", "9090")Vacía frente a no definida
Atención: una variable de entorno establecida en una cadena vacía sigue estando presente. os.LookupEnv devuelve ("", true). Si solo utiliza os.Getenv, no podrá distinguir entre una variable vacía y una no definida, algo importante para los flags similares a booleanos.
os.Setenv("FEATURE", "")
v, ok := os.LookupEnv("FEATURE")
fmt.Println(v == "", ok) // true trueUnirlo todo (concepto)
Un flujo de inicio habitual consiste en leer el archivo para obtener los valores predeterminados y después llamar a AutomaticEnv para que prevalezcan las variables de entorno del despliegue. El equipo de operaciones puede cambiar MYAPP_PORT sin tocar el archivo YAML.
viper.SetConfigName("config")
viper.ReadInConfig()
viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetInt("port"))Ejecutable: demostración de sobrescritura mediante el entorno
Este programa que utiliza la biblioteca estándar imita la precedencia de Viper: un valor predeterminado del archivo que el entorno sobrescribe.
package main
import (
"fmt"
"os"
)
func get(key, fileDefault string) string {
if v, ok := os.LookupEnv(key); ok {
return v
}
return fileDefault
}
func main() {
os.Setenv("PORT", "9090")
fmt.Println("port:", get("PORT", "8080"))
fmt.Println("host:", get("HOST", "localhost"))
}Comprobación rápida
Ponga a prueba sus conocimientos sobre la configuración mediante variables de entorno.
Resumen
Ha aprendido a sobrescribir la configuración desde el entorno:
- Las variables de entorno ocupan un lugar alto en la precedencia de Viper, por encima del archivo
AutomaticEnvySetEnvPrefixasignan las claves al formatoPREFIX_KEY- Use
SetEnvKeyReplacerpara las claves anidadas separadas por puntos - La biblioteca estándar proporciona esta funcionalidad mediante
os.Getenvyos.LookupEnv
Preguntas frecuentes
¿La lección «Variables de entorno» es gratis?
Sí — el texto completo de «Variables de entorno» 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 «Variables de entorno»?
Anule la configuración desde el entorno 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 «Variables de entorno»?
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