godotenv en Go: guía completa con ejemplos prácticos
La librería godotenv es una herramienta portátil y ligera para cargar variables de entorno desde archivos de tipo .env en el entorno de ejecución de aplicaciones escritas en Go. Está inspirada en la librería homónima para Ruby y Node.js y sigue el principio de la «12 Factor App», que establece que la configuración debe almacenarse en variables de entorno. godotenv permite a los desarrolladores sacar los datos sensibles (claves de API, contraseñas de bases de datos, ajustes de conexión) del código fuente y colocarlos en un archivo separado que no se sube al sistema de control de versiones.
La función principal de la librería es simplificar la gestión de la configuración durante el desarrollo. En entornos de producción, las variables de entorno suelen definirse mediante mecanismos del sistema (Docker, Kubernetes, pipelines de CI/CD), pero en la máquina local del desarrollador es más cómodo usar un archivo .env. godotenv lee este archivo automáticamente y hace que todas las variables definidas en él estén disponibles a través de la función estándar os.Getenv(). Esto evita tener que escribir tu propio analizador sintáctico y manejar casos extremos.
La librería admite valores multilínea, comentarios (líneas que empiezan con #), líneas en blanco y escape de caracteres especiales. No tiene dependencias externas, aparte de la librería estándar de Go, lo que la convierte en la opción ideal para microservicios y utilidades de consola. godotenv no sobrescribe las variables de entorno del sistema que ya existen, lo que garantiza un comportamiento seguro durante el despliegue.
Instalación
Para instalar la librería, ejecuta uno de los siguientes comandos en la terminal, dentro de la raíz de tu proyecto Go:
# Instalar la última versión estable
go get github.com/joho/godotenv
# Si usas Go Modules (recomendado)
go get github.com/joho/godotenv@latest
Después de ejecutar el comando, aparecerá una entrada de dependencia en el archivo go.mod. Asegúrate de que tu proyecto esté inicializado con go mod init.
Inicio rápido
Crea un archivo .env en la raíz de tu proyecto con el siguiente contenido:
# Archivo .env
APP_NAME=MiSuperApp
DB_HOST=localhost
DB_PORT=5432
DB_USER=admin
DB_PASSWORD=secreto123
SECRET_KEY=mi-super-clave-secreta
Ahora escribe un programa simple en Go que cargue este archivo y muestre los valores de las variables:
package main
import (
"fmt"
"log"
"os"
"github.com/joho/godotenv"
)
func main() {
// Cargamos el archivo .env
err := godotenv.Load()
if err != nil {
log.Fatal("Error al cargar el archivo .env:", err)
}
// Leemos las variables de entorno
appName := os.Getenv("APP_NAME")
dbHost := os.Getenv("DB_HOST")
dbPort := os.Getenv("DB_PORT")
dbUser := os.Getenv("DB_USER")
dbPassword := os.Getenv("DB_PASSWORD")
fmt.Printf("Aplicación: %s\n", appName)
fmt.Printf("Base de datos: %s:%s\n", dbHost, dbPort)
fmt.Printf("Usuario: %s\n", dbUser)
fmt.Printf("Contraseña: %s\n", dbPassword)
}
Ejecuta el programa:
go run main.go
Deberías ver la salida con los datos de tu archivo .env.
Métodos y funciones principales
La librería godotenv proporciona varias funciones clave para trabajar con archivos de configuración. Veamos cada una de ellas en detalle.
1. Load(filenames ...string) error
Firma: func Load(filenames ...string) error
Descripción: Carga las variables de los archivos especificados en el entorno del proceso. Si no se indican archivos, por defecto busca el archivo .env en el directorio de trabajo actual. Si el archivo no se encuentra, devuelve un error.
package main
import (
"fmt"
"os"
"github.co