O que é viper e para que serve?
Viper é uma biblioteca poderosa para gerenciamento de configuração em aplicações Go (Golang). Ela resolve uma das principais tarefas de desenvolvimento: o gerenciamento centralizado e flexível das configurações da aplicação, independentemente da fonte de dados. Viper suporta trabalho com JSON, TOML, YAML, HCL, INI, envfile e variáveis de ambiente, tornando-o a escolha ideal para microsserviços, utilitários CLI e aplicações web.
Principais funcionalidades
- Múltiplas fontes: leitura de arquivos (JSON, YAML, TOML), variáveis de ambiente, armazenamentos remotos (etcd, Consul) e até flags de linha de comando.
- Prioridades: resolução automática de conflitos — a última fonte definida tem a prioridade mais alta.
- Recarga ao vivo: capacidade de monitorar alterações em arquivos de configuração sem reiniciar a aplicação (requer configuração adicional).
- Suporte a chaves aninhadas: acesso às configurações através de notação por ponto (por exemplo,
app.db.host).
Instalação
Instale o viper através do gerenciador de pacotes padrão do Go:
go get github.com/spf13/viperExemplo de código em Go
Crie um arquivo config.yaml:
app: name: "MyApp" port: 8080database: host: "localhost" user: "admin" password: "secret"Exemplo de uso do viper para ler a configuração:
package main
import (\t"fmt"\t"github.com/spf13/viper")
func main() {\tviper.SetConfigName("config")\tviper.SetConfigType("yaml")\tviper.AddConfigPath(".")
\terr := viper.ReadInConfig()\tif err != nil {\t\tpanic(fmt.Errorf("erro ao ler configuração: %w", err))\t}
\tappName := viper.GetString("app.name")\tport := viper.GetInt("app.port")\tdbHost := viper.GetString("database.host")
\tfmt.Printf("App: %s, Porta: %d, DB: %s", appName, port, dbHost)}Também é possível usar variáveis de ambiente com prefixo:
viper.SetEnvPrefix("MYAPP")viper.AutomaticEnv()// Agora a variável MYAPP_APP_PORT estará disponível como app.portQuando usar viper?
- Quando for necessário suporte a múltiplos formatos de configuração (YAML, JSON, TOML).
- Para aplicações onde as configurações podem ser sobrescritas por variáveis de ambiente (por exemplo, em Docker/Kubernetes).
- Em arquitetura de microsserviços, onde a configuração pode ser carregada de serviços externos (etcd, Consul).
- Se for necessário dividir a configuração em ambientes dev/staging/production.
Viper é o padrão de facto para gerenciamento de configuração na comunidade Go, sendo usado em projetos como Hugo, Docker CLI e muitos outros.
Também na biblioteca
Envio de email em PHP: PHPMailer, SwiftMailer e mail() — guia completo
gRPC para JavaScript (Node.js): bibliotecas e exemplos de código
Cliente OAuth para PHP: autenticação via redes sociais e API
Trabalhando com Excel em C# (.NET): bibliotecas EPPlus, ClosedXML e NPOI
chi para Go: guia completo com exemplos