Läsa konfigurationsfiler
Läs in YAML, JSON och TOML
Läsa konfigurationsfiler är en gratis lektion i Go Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Go Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Go Academy innehåller totalt 4 lektioner.
Konfiguration hör hemma utanför koden
Att hårdkoda värden som portar, värdnamn och tidsgränser i Go-programmet är skört. Viper är de facto-standardbiblioteket för konfiguration i Go: det läser inställningar från filer, miljövariabler, flaggor och fjärrlagringar.
I den här lektionen läser du in konfiguration från en fil på disk.
Vilka format läser Viper
Viper har stöd för många format direkt:
- YAML (
.yaml/.yml) - JSON (
.json) - TOML (
.toml) - HCL-, INI- och Java properties-filer
Formatet väljs med SetConfigType, eller så tolkar Viper det utifrån filändelsen.
Installera och importera Viper
Lägg till Viper i modulen och importera det:
go get github.com/spf13/viperimport "github.com/spf13/viper"
Eftersom Viper är ett externt beroende kan kodexempel som importerar det inte köras i den här lektionsspelaren. Där det är möjligt simulerar vi beteendet med standardbiblioteket.
import "github.com/spf13/viper"Tala om för Viper var det ska leta
Konfigurera filnamn, filtyp och sökvägar innan filen läses:
viper.SetConfigName("config")anger basnamnet utan filändelseviper.SetConfigType("yaml")anger formatetviper.AddConfigPath(".")lägger till en katalog att söka i
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".")
viper.AddConfigPath("/etc/myapp")Läs filen
Anropa viper.ReadInConfig() för att läsa in filen. Det returnerar ett fel som måste hanteras:
- Om filen saknas returneras ett
ConfigFileNotFoundError - En felaktigt formaterad fil returnerar ett tolkningsfel
if err := viper.ReadInConfig(); err != nil {
log.Fatalf("failed to read config: %v", err)
}En exempelkonfiguration i YAML
Föreställ dig en config.yaml som denna. Viper plattar ut nästlade nycklar med punkter, så porten blir server.port.
server:
port: 8080
host: "localhost"
debug: trueHämta typade värden
Viper tillhandahåller typade getters, så att manuella konverteringar kan undvikas:
viper.GetInt("server.port")viper.GetString("server.host")viper.GetBool("debug")
port := viper.GetInt("server.port")
host := viper.GetString("server.host")
debug := viper.GetBool("debug")
fmt.Println(host, port, debug)JSON fungerar på samma sätt
Att byta till JSON ändrar bara filinnehållet och konfigurationstypen. Samma nyckelsökvägar och getters gäller. Denna portabilitet är en anledning till att Viper är populärt: koden behöver inte bry sig om vilket format driftteamet valde.
{
"server": { "port": 8080, "host": "localhost" },
"debug": true
}TOML stöds också
TOML är vanligt i Go-ekosystemet, och många CLI-verktyg använder det. Samma nästlade nycklar motsvarar punktseparerade sökvägar.
[server]
port = 8080
host = "localhost"
debug = trueParsa JSON med standardbiblioteket
För att se idén fungera i praktiken visar vi här hur vanlig Go-kod parsar JSON-konfiguration utan Viper och bara använder encoding/json för att läsa in den i en map. Viper använder själv en generell map under huven.
package main
import (
"encoding/json"
"fmt"
)
func main() {
raw := "{\"port\":8080,\"host\":\"localhost\"}"
var c map[string]any
if err := json.Unmarshal([]byte(raw), &c); err != nil {
panic(err)
}
fmt.Printf("%v:%v\n", c["host"], c["port"])
}Körbart: Läs in i en map
Det här fristående programmet parsar JSON-konfiguration till en generell map och skriver ut värden, vilket motsvarar vad Viper gör under huven för JSON.
package main
import (
"encoding/json"
"fmt"
)
func main() {
raw := "{\"port\":8080,\"host\":\"localhost\"}"
var m map[string]any
json.Unmarshal([]byte(raw), &m)
fmt.Println("host:", m["host"])
fmt.Println("port:", m["port"])
}Snabbtest
Testa dina kunskaper om att läsa konfigurationsfiler med Viper.
Sammanfattning
Du har lärt dig hur Viper läser konfigurationsfiler:
- Det har transparent stöd för YAML, JSON och TOML
- Konfigurera med
SetConfigName,SetConfigTypeochAddConfigPath ReadInConfig()läser in filen och returnerar ett fel- Typade getters som
GetIntochGetStringläser värden med hjälp av punktseparerade nycklar
Nästa steg: åsidosätt konfiguration med miljövariabler.
Lär dig Go med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 51
- Lektioner
- 203
Vanliga frågor
Är lektionen ”Läsa konfigurationsfiler” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Go Academy, inklusive ”Läsa konfigurationsfiler”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Go Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Läsa konfigurationsfiler”?
Läs in YAML, JSON och TOML Ni övar på Go Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Go Academy?
Du behöver inga förkunskaper. Utbildningen i Go Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Läsa konfigurationsfiler”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Go Academy-lektionen?
Ja. Varje Go Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Läsa konfigurationsfiler
- Miljövariabler
- Standardvärden och bevakning
- Binda till structs