Variabili d'ambiente
Sovrascrivere la configurazione dall'ambiente
Variabili d'ambiente è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Perché usare le variabili d'ambiente
La metodologia Twelve-Factor App raccomanda di memorizzare la configurazione nell'ambiente. Le variabili d'ambiente permettono allo stesso binario di comportarsi in modo diverso negli ambienti di sviluppo, staging e produzione, senza modificare i file.
Viper può sovrapporre le variabili d'ambiente alla configurazione del file.
Ordine di precedenza
Viper risolve una chiave verificando le origini in ordine di priorità, dalla più alta alla più bassa:
- Chiamate esplicite a
Set - Flag
- Variabili d'ambiente
- File di configurazione
- Valori predefiniti
Quindi una variabile d'ambiente sovrascrive il file, ma ha priorità inferiore rispetto a una chiamata esplicita a Set.
Attivare il supporto alle variabili d'ambiente
viper.AutomaticEnv() indica a Viper di verificare le variabili d'ambiente per ogni chiave richiesta. Dopodiché, viper.GetString("port") cercherà la variabile d'ambiente PORT.
viper.AutomaticEnv()
port := viper.GetString("port")Aggiungere un prefisso
Per evitare conflitti con variabili d'ambiente non correlate, imposti un prefisso:
viper.SetEnvPrefix("myapp")- La chiave
portcorrisponderà ora alla variabile d'ambienteMYAPP_PORT
Viper converte la chiave in maiuscolo e antepone il prefisso, separandolo con un carattere di sottolineatura.
viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetString("port")) // reads MYAPP_PORTGestire le chiavi annidate
Le variabili d'ambiente non possono contenere punti. Utilizzi un key replacer per convertire le chiavi separate da punti in chiavi con caratteri di sottolineatura, così server.port diventa SERVER_PORT.
replacer := strings.NewReplacer(".", "_")
viper.SetEnvKeyReplacer(replacer)
viper.AutomaticEnv()
// server.port -> SERVER_PORTAssociare una singola variabile
Anziché usare la modalità automatica, è possibile associare esplicitamente una chiave con viper.BindEnv. È utile quando il nome della variabile d'ambiente non segue la convenzione del prefisso.
viper.BindEnv("id", "ACCOUNT_ID")
fmt.Println(viper.GetString("id"))Il package os della libreria standard
Internamente, questa funzionalità legge dall'ambiente del processo, esposto dalla libreria standard tramite os.Getenv e os.LookupEnv.
os.Getenvrestituisce una stringa vuota se la variabile non è impostataos.LookupEnvrestituisce un secondo valore booleano che indica se la variabile era presente
val, ok := os.LookupEnv("PORT")
if !ok {
val = "8080" // default
}Impostare le variabili d'ambiente in Go
È possibile impostare programmaticamente le variabili d'ambiente per i test o per definire valori predefiniti con os.Setenv. È esattamente ciò che utilizzeremo per dimostrare il comportamento di sovrascrittura.
os.Setenv("MYAPP_PORT", "9090")Vuota e non impostata
Attenzione: una variabile d'ambiente impostata su una stringa vuota è comunque presente. os.LookupEnv restituisce ("", true). Se si utilizza solo os.Getenv, non è possibile distinguere un valore vuoto da una variabile non impostata, una differenza importante per i flag di tipo booleano.
os.Setenv("FEATURE", "")
v, ok := os.LookupEnv("FEATURE")
fmt.Println(v == "", ok) // true trueMettere tutto insieme (concetto)
Un tipico flusso di avvio consiste nel leggere il file per ottenere i valori predefiniti e poi chiamare AutomaticEnv, in modo che prevalgano le variabili d'ambiente della distribuzione. Il team operativo può modificare MYAPP_PORT senza toccare il file YAML.
viper.SetConfigName("config")
viper.ReadInConfig()
viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetInt("port"))Eseguibile: dimostrazione della sovrascrittura tramite l'ambiente
Questo programma basato sulla libreria standard riproduce la precedenza di Viper: un valore predefinito del file viene sovrascritto dall'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 rapida
Verifichi la propria comprensione della configurazione tramite variabili d'ambiente.
Riepilogo
Ha imparato a sovrascrivere la configurazione tramite l'ambiente:
- Le variabili d'ambiente hanno una precedenza elevata in Viper, superiore a quella del file
AutomaticEnveSetEnvPrefixassociano le chiavi al formatoPREFIX_KEY- Utilizzi
SetEnvKeyReplacerper le chiavi annidate separate da punti - La libreria standard fornisce questa funzionalità tramite
os.Getenv/os.LookupEnv
Domande Frequenti
La lezione «Variabili d'ambiente» è gratuita?
Sì — il testo completo di «Variabili d'ambiente» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Variabili d'ambiente»?
Sovrascrivere la configurazione dall'ambiente Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Variabili d'ambiente»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Leggere file di configurazione
- Variabili d'ambiente
- Valori predefiniti e monitoraggio
- Associare agli struct