0Pricing
Go Academy · Aula

Variáveis de ambiente

Substitua a configuração com o ambiente

Variáveis de ambiente é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.

Por que usar variáveis de ambiente

A metodologia Twelve-Factor App recomenda armazenar a configuração no ambiente. As variáveis de ambiente permitem que o mesmo binário se comporte de maneiras diferentes em desenvolvimento, homologação e produção, sem editar arquivos.

O Viper pode sobrepor a configuração do arquivo com variáveis de ambiente.

Ordem de precedência

O Viper resolve uma chave verificando as fontes em ordem de prioridade (da maior para a menor):

  • Chamadas explícitas a Set
  • Sinalizadores
  • Variáveis de ambiente
  • Arquivo de configuração
  • Padrões

Assim, uma variável de ambiente substitui o valor do arquivo, mas perde para uma chamada explícita a Set.

Ativando o suporte a variáveis de ambiente

viper.AutomaticEnv() instrui o Viper a verificar as variáveis de ambiente para qualquer chave solicitada. Depois disso, viper.GetString("port") consultará a variável de ambiente PORT.

viper.AutomaticEnv()
port := viper.GetString("port")

Adicionando um prefixo

Para evitar conflitos com variáveis de ambiente não relacionadas, defina um prefixo:

  • viper.SetEnvPrefix("myapp")
  • Agora a chave port corresponde à variável de ambiente MYAPP_PORT

O Viper converte a chave para maiúsculas e acrescenta o prefixo, separando-os com um sublinhado.

viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetString("port")) // reads MYAPP_PORT

Tratando chaves aninhadas

As variáveis de ambiente não podem conter pontos. Use um substituidor de chaves para mapear chaves com pontos para sublinhados, de modo que server.port se torne SERVER_PORT.

replacer := strings.NewReplacer(".", "_")
viper.SetEnvKeyReplacer(replacer)
viper.AutomaticEnv()
// server.port -> SERVER_PORT

Vinculando uma única variável

Em vez do modo automático, você pode vincular explicitamente uma chave com viper.BindEnv. Isso é útil quando o nome da variável de ambiente não segue a convenção do seu prefixo.

viper.BindEnv("id", "ACCOUNT_ID")
fmt.Println(viper.GetString("id"))

O pacote os da biblioteca padrão

Internamente, isso lê o ambiente do processo, disponibilizado pela biblioteca padrão por meio de os.Getenv e os.LookupEnv.

  • os.Getenv retorna uma cadeia vazia se a variável não estiver definida
  • os.LookupEnv retorna um segundo booleano informando se ela estava presente
val, ok := os.LookupEnv("PORT")
if !ok {
    val = "8080" // default
}

Definindo variáveis de ambiente em Go

Você pode definir variáveis de ambiente programaticamente para testes ou padrões com os.Setenv. É exatamente isso que usamos para demonstrar o comportamento de substituição a seguir.

os.Setenv("MYAPP_PORT", "9090")

Vazia versus não definida

Atenção: uma variável de ambiente definida como uma cadeia vazia ainda está presente. os.LookupEnv retorna ("", true). Se usar apenas os.Getenv, você não conseguirá distinguir uma variável vazia de uma não definida, o que é importante para sinalizadores semelhantes a booleanos.

os.Setenv("FEATURE", "")
v, ok := os.LookupEnv("FEATURE")
fmt.Println(v == "", ok) // true true

Juntando tudo (conceito)

Um fluxo típico de inicialização: leia o arquivo para obter padrões e depois chame AutomaticEnv para que as variáveis de ambiente da implantação tenham precedência. A equipe de operações pode alterar MYAPP_PORT sem modificar o YAML.

viper.SetConfigName("config")
viper.ReadInConfig()
viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetInt("port"))

Executável: demonstração de substituição por variável de ambiente

Este programa que usa a biblioteca padrão imita a precedência do Viper: um padrão do arquivo substituído pelo ambiente.

package main

import (
    "fmt"
    "os"
)

func get(key, fileDefault string) string {
    if v, ok := os.LookupEnv(key); ok {
        return v
    }
    return fileDefault
}

func main() {
    os.Setenv("PORT", "9090")
    fmt.Println("port:", get("PORT", "8080"))
    fmt.Println("host:", get("HOST", "localhost"))
}

Verificação rápida

Teste seus conhecimentos sobre a configuração com variáveis de ambiente.

Recapitulação

Você aprendeu a substituir a configuração pelo ambiente:

  • As variáveis de ambiente têm alta precedência no Viper, acima do arquivo
  • AutomaticEnv + SetEnvPrefix mapeiam chaves para PREFIX_KEY
  • Use SetEnvKeyReplacer para chaves aninhadas separadas por pontos
  • A biblioteca padrão oferece esse suporte por meio de os.Getenv / os.LookupEnv

Perguntas Frequentes

A aula “Variáveis de ambiente” é grátis?

Sim — o texto completo de “Variáveis de ambiente” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.

O que vou aprender em “Variáveis de ambiente”?

Substitua a configuração com o ambiente Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Go Academy?

Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Variáveis de ambiente”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Go Academy?

Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Leitura de arquivos de configuração
  2. Variáveis de ambiente
  3. Padrões e monitoramento
  4. Vinculação a structs
← Voltar para Go Academy