Go Academy · Lektion

Läsa konfigurationsfiler

Läs in YAML, JSON och TOML

Lektion 1 av 413 steg

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/viper
  • import "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ändelse
  • viper.SetConfigType("yaml") anger formatet
  • viper.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: true

Hä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 = true

Parsa 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, SetConfigType och AddConfigPath
  • ReadInConfig() läser in filen och returnerar ett fel
  • Typade getters som GetInt och GetString läser värden med hjälp av punktseparerade nycklar

Nästa steg: åsidosätt konfiguration med miljövariabler.

Gratis att börja

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

  1. Läsa konfigurationsfiler
  2. Miljövariabler
  3. Standardvärden och bevakning
  4. Binda till structs
← Tillbaka till Go Academy