Ved å bruke YAML kan du skrive Go-programmer som samvirker med andre ved å bruke dataformatet. Den er lesbar for mennesker, så lett å jobbe med.

YAML er et populært, menneskelig lesbart dataserialiseringsformat. Dataspråket er egnet for konfigurasjonsfiler, datautveksling og strukturert datalagring.

Mange Go-baserte prosjekter, inkludert Gqlgen og byggeverktøy som Docker-compose, bruker YAML-filer for konfigurasjon. Som Go-utvikler kan du bruke verktøy som yaml-pakken til å analysere og manipulere YAML-data.

Forstå en YAML-fil

YAML-filer (YAML Ain't Markup Language) består av nøkkelverdi-par, lister og nestede strukturer. YAML-syntaks er designet for å være visuelt tiltalende og lett å lese. Dette gjør det til et populært valg for konfigurasjonsfiler, med Kubernetes og andre orkestreringsverktøy ved hjelp av YAML.

I motsetning til andre dataformater som XML og JSON, YAML er avhengig av innrykk for å representere hierarki.

Slik kan du definere grunnleggende felt med YAML:

Navn:JohnDoe
alder:30
e-post:[email protected]
instagram viewer

Et kolon skiller nøkkelen fra dens verdi, som kan være en hvilken som helst gyldig YAML-datatype, inkludert strenger, tall, booleaner eller nestede strukturer.

Lister lar deg representere en samling verdier. For å definere en liste i YAML, bruk en bindestrek etterfulgt av et mellomrom før hvert element:

frukt:
-eple
-banan
-oransje

Her, frukt er nøkkelen, og bindestrekene definerer en liste over frukter.

YAML støtter også nestede strukturer, slik at du kan representere komplekse datahierarkier:

person:
Navn:JohnDoe
alder:30
adresse:
gate:123HovedSt
by:Anytown
land:USA

De person nøkkel inneholder et annet sett med nøkkelverdi-par, som danner en nestet struktur. De adresse nøkkel har sitt eget sett med nøkkelverdi-par.

Arbeide med YAML i Go

Go gir ikke innebygd funksjonalitet for YAML-filer, men det er tredjepartspakker som gjør det.

De yaml pakke er en populær pakke for arbeid med YAML-filer. Det gir:

  • Parsing og serialiseringsfunksjoner.
  • Støtte for YAML-tagger.
  • Omfattende YAML-spesifikasjonsoverholdelse.
  • Finmasket kontroll over rangering og unmarshalling.
  • Feilhåndtering.
  • Kompatibilitet med flere YAML-versjoner.

Åpne terminalen og kjør denne kommandoen for å installere YAML-pakken for prosjektet ditt:

# installer versjon 3 av yaml-pakken
gå til gopkg.in/yaml.v3

Etter å ha installert pakken, kan du bruke import uttalelse for å importere pakken til Go-filene dine.

import"gopkg.in/yaml.v3"

Du kan velge flere YAML-versjoner basert på versjonen av YAML-spesifikasjonen du vil bruke.

Lese og analysere YAML to Go-datastrukturer

En viktig oppgave du vil utføre er å analysere YAML to Go-datastrukturer. De yaml pakken gir en enkel, praktisk API for å gjøre dette.

Tenk på disse YAML-dataene:

# output.yaml

person:
Navn:JohnDoe
alder:30
e-post:[email protected]

Du kan definere en tilsvarende struktur med samsvarende feltnavn for å analysere YAML-dataene til en Go-datastruktur med yaml pakke.

// Person struct representerer personnøkkelen i YAML.
type Person struktur {
Navn streng`yaml:"navn"`
Alder int`yaml:"alder"`
E-post streng`yaml:"e-post"`
}

De yaml struct-tagger hjelper til med å kartlegge YAML-nøklene til struct-feltene under analyseoperasjonen.

Slik kan du analysere YAML-dataene til en Go-datastruktur:

import (
"fmt"
"gopkg.in/yaml.v3"
"os"
)

funchoved-() {
// les output.yaml-filen
data, feil := os. ReadFile("output.yaml")

hvis feil!= null {
panikk(feil)
}

// lag en personstruktur og deserialiser dataene til den strukturen
var person Person

hvis feil := yaml. Unmarshal (data, &person); feil!= null {
panikk(feil)
}

// skriv ut feltene til konsollen
fmt. Printf("Navn: %s\n", person. Navn)
fmt. Printf("Alder: %d\n", person. Alder)
fmt. Printf("E-post: %s\n", person. e-post)
}

De hoved- funksjonen leser output.yaml fil med ioutil pakkens ReadFile funksjon. Det oppretter deretter en forekomst av Person struct og analyserer dataene inn i strukturen med Unmarshal metoden for yaml pakke. De hoved- funksjonen skriver ut feltene fra struct-forekomsten; her er resultatet:

Sette inn data i en YAML-fil

Du kan bruke Go-datastrukturer til å sette inn data i YAML-filer. Slik kan du sette inn data til en YAML-fil med en forekomst av Person struktur:

funchoved-() {
// Opprett en forekomst av Person-strukturen med eksempeldata
person := person{
Navn: "John Doe",
Alder: 30,
E-post: "[email protected]",
}

// Serialiser personstrukturen til YAML-format
data, feil := yaml. Marshal (&person)

hvis feil!= null {
panikk(feil)
}

// Skriv de serialiserte YAML-dataene til en fil som heter "output.yaml"
feil = os. Skriv fil("output.yaml", data, 0644)

hvis feil!= null {
panikk(feil)
}

fmt. Println("Data skrevet til output.yaml")
}

De person variabel er en forekomst av Person strukturtype. Bruke Marskalk metoden for yaml pakke for å konvertere strukturen til YAML. Den tar forekomsten av strukturen og returnerer YAML-representasjonen og en feil.

Du kan bruke Skriv fil funksjonen til os pakke for å skrive YAML-dataene til filen din (i dette tilfellet, output.yaml).

Etter en vellykket YAML-dataserialisering og skriveoperasjon, hoved- funksjonen skriver ut en melding til konsollen.

Du kan sette opp og sette YAML inn i kart som du gjør med strukturer.

Her er et eksempel på rangering og demontering av YAML-data med kart:

pakke hoved-

import (
"fmt"
"gopkg.in/yaml.v3"
)

funchoved-() {
// Data for marshaling
data := kart[streng]grensesnitt{}{
"Navn": "John Doe",
"alder": 30,
"e-post": "[email protected]",
}

// Sorterer dataene inn i YAML
yamlData, feil := yaml. Marshal (data)

hvis feil!= null {
fmt. Println("Feil under rangering:", feil)
komme tilbake
}

fmt. Println("Marshaled YAML-data:")
fmt. Println(streng(yamlData))

// Unmarshalling YAML data til et kart
var unmarshalledData kart[streng]grensesnitt{}
feil = yaml. Unmarshal (yamlData, &unmarshalledData)

hvis feil!= null {
fmt. Println("Feil under unmarshalling:", feil)
komme tilbake
}

fmt. Println("\nUrangerte data:")
fmt. Println (unmarshalledData)
}

Prosessen er den samme som for strukturtyper, bortsett fra at du bruker kart for datarepresentasjonen. De Unmarshal og Marskalk metoder fungerer for begge datatyper.

Docker Compose bruker YAML-filer for konfigurasjon

Arbeid med YAML-filer i Go gir en kraftig og fleksibel tilnærming for å administrere konfigurasjonsdata.

Et fremtredende bruksområde for YAML-filer er Docker Compose, der en YAML-fil fungerer som konfigurasjonen for å definere og administrere Docker-applikasjoner med flere beholdere.

Docker Compose utnytter enkelheten og lesbarheten til YAML for å definere tjenester, nettverk, volumer og andre komponenter i containeriserte applikasjoner for å gjøre containerorkestrering enkelt.