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?