Viper para Go: guia completo com exemplos

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?

\n\n

Viper é uma das bibliotecas mais populares para gerenciamento de configuração em aplicações Go. Ela fornece uma forma universal e flexível de trabalhar com configurações que podem vir de diversas fontes: arquivos de configuração (JSON, TOML, YAML, HCL, INI, envfile), variáveis de ambiente, flags de linha de comando, armazenamentos remotos (etcd, Consul) e até valores padrão definidos no código.

\n\n

Para que serve o Viper? No desenvolvimento moderno, a configuração raramente é estática. Uma aplicação pode ser executada em diferentes ambientes (dev, staging, production), usar diferentes bancos de dados, chaves de API e portas. O Viper resolve vários problemas-chave:

\n
    \n
  • Estrutura hierárquica: permite aninhar configurações umas dentro das outras (por exemplo, database.host).
  • \n
  • Prioridade de fontes: define claramente qual fonte tem maior prioridade (por exemplo, flags sobrescrevem variáveis de ambiente).
  • \n
  • Vinculação automática: pode vincular automaticamente variáveis de ambiente a chaves de configuração.
  • \n
  • Suporte a múltiplos formatos: não é necessário escrever parsers para cada formato.
  • \n
  • Segurança de tipos: fornece métodos para obter valores com conversão para o tipo desejado (GetInt, GetString, GetBool, etc.).
  • \n
\n\n

O Viper é ideal para criar microsserviços, aplicações web, utilitários CLI e qualquer outro programa em Go que exija gerenciamento flexível de configurações.

\n\n

Instalação do Viper

\n\n

O Viper é instalado da forma padrão para Go — através do gerenciador de pacotes go get. Certifique-se de ter o Go versão 1.18 ou superior instalado.

\n\n
go get github.com/spf13/viper
\n\n

Após executar este comando, o Viper será adicionado ao seu arquivo go.mod. Para trabalhar com formatos de arquivo específicos (por exemplo, YAML), você também pode precisar de bibliotecas adicionais, mas o Viper já vem com suporte básico para JSON, TOML e YAML "de fábrica". Se você usa go mod, as dependências serão baixadas automaticamente.

\n\n

Exemplo de importação no código:

\n
import (\n    "github.com/spf13/viper"\n)
\n\n

Início rápido: primeiro exemplo com Viper

\n\n

Vamos escrever um programa simples que lê uma configuração do arquivo config.yaml e exibe uma saudação.

\n\n

Crie o arquivo config.yaml:

\n
app:\n  name: "MyApp"\n  version: "1.0.0"\nserver:\n  port: 8080
\n\n

Agora crie o arquivo main.go:

\n
package main\n\nimport (\n    "fmt"\n    "log"\n    "github.com/spf13/viper"\n)\n\nfunc main() {\n    // Define o nome do arquivo de configuração\n    viper.SetConfigName("config")\n    // Define o tipo do arquivo\n    viper.SetConfigType("yaml")\n    // Adiciona caminhos de busca\n    viper.AddConfigPath(".")\n\n    // Lê a configuração\n    if err := viper.ReadInConfig(); err != nil {\n        log.Fatalf("Erro ao ler configuração: %s", err)\n    }\n\n    // Obtém os valores\n    appName := viper.GetString("app.name")\n    appVersion := viper.GetString("app.version")\n    port := viper.GetInt("server.port")\n\n    fmt.Printf("Aplicação: %s (versão %s) rodando na porta %d\\n", appName, appVersion, port)\n}
\n\n

Execute o programa:

\n
go run main.go
\n\n

Saída:

\n
Aplicação: MyApp (versão 1.0.0) rodando na porta 8080
\n\n

Este exemplo simples demonstra a mecânica básica: informamos ao Viper onde encontrar o arquivo, o lemos e depois extraímos os valores pelas chaves.

\n\n

Métodos e funções principais do Viper

\n\n

O Viper fornece uma API rica. Abaixo, exploraremos 10 métodos-chave com descrição detalhada e exemplos.

\n\n

1. SetConfigName

\n<

Recommendations