Avatar ·

Como trabalhar corretamente com configuração em Go: ENV, JSON, YAML ou flags?

Olá a todos! Sou um desenvolvedor Go iniciante, escrevendo meu primeiro microsserviço para processamento de pedidos. Enfrentei um problema: não consigo entender como organizar corretamente o armazenamento de parâmetros de configuração (porta do servidor, string de conexão com o banco de dados, URL de API externa, timeouts, etc.). Atualmente, eu simplesmente coloquei tudo hardcoded no 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) } ``` Entendo que isso é horrível: ao mudar de ambiente (dev/staging/prod), é necessário recompilar o binário, e senhas no código são um desastre de segurança. Vi que em Go usam diferentes abordagens: flags de linha de comando, variáveis de ambiente, arquivos JSON/YAML/Toml. Mas qual escolher? Como combinar várias fontes? Como fazer com que a configuração seja type-safe?