Configuração de aplicações Go: biblioteca viper

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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/viper

Exemplo 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.port

Quando 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.

Recommendations