Cómo trabajar correctamente con la configuración en Go: ENV, JSON, YAML o flags?
¡Hola a todos! Soy un desarrollador Go principiante y estoy escribiendo mi primer microservicio para procesar pedidos. Me encontré con un problema: no puedo entender cómo organizar correctamente el almacenamiento de parámetros de configuración (puerto del servidor, cadena de conexión a la base de datos, URL de API externa, timeouts, etc.).
Ahora mismo tengo todo hardcodeado en main.go:
```go
package main
import (
"fmt"
"net/http"
)
func main() {
port := ":8080"
dbConn := "postgres://user:pass@localhost:5432/orders?sslmode=disable"
apiURL := "https://api.example.com"
fmt.Println("Starting server on", port)
http.ListenAndServe(port, nil)
}
```
Entiendo que esto es terrible: al cambiar de entorno (dev/staging/prod) necesito recompilar el binario, y tener contraseñas en el código es un desastre de seguridad. He visto que en Go se usan diferentes enfoques: flags de línea de comandos, variables de entorno, archivos JSON/YAML/TOML. Pero, ¿cuál elegir? ¿Cómo combinar múltiples fuentes? ¿Cómo hacer que la configuración sea type-safe?