Zmienne środowiskowe
Nadpisuj konfigurację zmiennymi środowiskowymi
Zmienne środowiskowe to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.
Dlaczego warto używać zmiennych środowiskowych
Metodyka Twelve-Factor App zaleca przechowywanie konfiguracji w środowisku. Zmienne środowiskowe pozwalają, aby ten sam plik binarny działał inaczej w środowiskach deweloperskim, testowym i produkcyjnym, bez edytowania plików.
Viper może nakładać zmienne środowiskowe na konfigurację z pliku.
Kolejność pierwszeństwa
Viper rozstrzyga wartość klucza, sprawdzając źródła w kolejności priorytetów (od najwyższego):
- Jawne wywołania
Set - Flagi
- Zmienne środowiskowe
- Plik konfiguracyjny
- Wartości domyślne
Zmienna środowiskowa zastępuje więc wartość z pliku, ale ma niższy priorytet niż jawne wywołanie Set.
Włączanie obsługi zmiennych środowiskowych
viper.AutomaticEnv() informuje Viper, aby sprawdzał zmienne środowiskowe dla każdego żądanego klucza. Od tej chwili viper.GetString("port") sprawdzi zmienną środowiskową PORT.
viper.AutomaticEnv()
port := viper.GetString("port")Dodawanie prefiksu
Aby uniknąć kolizji z niezwiązanymi zmiennymi środowiskowymi, ustaw prefiks:
viper.SetEnvPrefix("myapp")- Od tej pory klucz
portjest mapowany na zmienną środowiskowąMYAPP_PORT
Viper zamienia klucz na wielkie litery i dodaje przed nim prefiks oddzielony podkreśleniem.
viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetString("port")) // reads MYAPP_PORTObsługa zagnieżdżonych kluczy
Zmienne środowiskowe nie mogą zawierać kropek. Użyj zamiennika kluczy, aby mapować klucze rozdzielane kropkami na podkreślenia, dzięki czemu server.port stanie się SERVER_PORT.
replacer := strings.NewReplacer(".", "_")
viper.SetEnvKeyReplacer(replacer)
viper.AutomaticEnv()
// server.port -> SERVER_PORTPowiązanie pojedynczej zmiennej
Zamiast trybu automatycznego można jawnie powiązać jeden klucz za pomocą viper.BindEnv. Jest to przydatne, gdy nazwa zmiennej środowiskowej nie jest zgodna z konwencją prefiksu.
viper.BindEnv("id", "ACCOUNT_ID")
fmt.Println(viper.GetString("id"))Pakiet os biblioteki standardowej
Wewnętrznie odczyt odbywa się ze środowiska procesu, udostępnianego przez bibliotekę standardową za pomocą os.Getenv i os.LookupEnv.
os.Getenvzwraca pusty ciąg, jeśli zmienna nie jest ustawionaos.LookupEnvzwraca drugą wartość typu bool informującą, czy zmienna była obecna
val, ok := os.LookupEnv("PORT")
if !ok {
val = "8080" // default
}Ustawianie zmiennych środowiskowych w Go
Można programowo ustawiać zmienne środowiskowe na potrzeby testów lub wartości domyślnych za pomocą os.Setenv. Właśnie tego użyjemy w kolejnym przykładzie, aby zademonstrować działanie zastępowania wartości.
os.Setenv("MYAPP_PORT", "9090")Pusta zmienna a nieustawiona zmienna
Uwaga: zmienna środowiskowa ustawiona na pusty ciąg nadal jest obecna. os.LookupEnv zwraca ("", true). Jeśli używa się wyłącznie os.Getenv, nie można odróżnić wartości pustej od braku ustawienia, co ma znaczenie w przypadku flag przypominających wartości logiczne.
os.Setenv("FEATURE", "")
v, ok := os.LookupEnv("FEATURE")
fmt.Println(v == "", ok) // true truePołączenie elementów (koncepcja)
Typowy przebieg uruchamiania wygląda tak: najpierw odczytaj plik zawierający wartości domyślne, a następnie wywołaj AutomaticEnv, aby zmienne środowiskowe wdrożenia miały pierwszeństwo. Zespół operacyjny może zmienić MYAPP_PORT bez modyfikowania pliku YAML.
viper.SetConfigName("config")
viper.ReadInConfig()
viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetInt("port"))Wykonywalny przykład: demonstracja zastępowania zmiennej
Ten program korzystający z biblioteki standardowej imituje kolejność pierwszeństwa Viper: wartość domyślna z pliku jest zastępowana przez wartość ze środowiska.
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"))
}Szybkie sprawdzenie
Sprawdź swoją wiedzę o konfiguracji za pomocą zmiennych środowiskowych.
Podsumowanie
Dowiedzieli się Państwo, jak zastępować konfigurację wartościami ze środowiska:
- Zmienne środowiskowe mają wysoki priorytet w Viper, wyższy niż plik
AutomaticEnvwraz zSetEnvPrefixmapują klucze na formatPREFIX_KEY- W przypadku zagnieżdżonych kluczy rozdzielanych kropkami należy używać
SetEnvKeyReplacer - Biblioteka standardowa zapewnia tę obsługę za pomocą
os.Getenv/os.LookupEnv
Często zadawane pytania
Czy lekcja „Zmienne środowiskowe” jest bezpłatna?
Tak — pełny tekst „Zmienne środowiskowe” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Zmienne środowiskowe”?
Nadpisuj konfigurację zmiennymi środowiskowymi Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Go Academy?
Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Zmienne środowiskowe”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?
Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Odczytywanie plików konfiguracyjnych
- Zmienne środowiskowe
- Wartości domyślne i obserwowanie
- Powiązanie ze strukturami