Naudodami YAML galite rašyti Go programas, kurios sąveikauja su kitais naudojant duomenų formatą. Jis suprantamas žmonėms, todėl lengva dirbti.
YAML yra populiarus žmonių skaitomas duomenų serializavimo formatas. Duomenų kalba tinka konfigūracijos failams, duomenų mainams ir struktūrinių duomenų saugojimui.
Daugelis „Go“ pagrįstų projektų, įskaitant „Gqlgen“ ir kūrimo įrankius, tokius kaip „Docker-compose“, konfigūravimui naudoja YAML failus. Kaip „Go“ kūrėjas, galite naudoti tokius įrankius kaip „yaml“ paketas, kad analizuotumėte ir tvarkytumėte YAML duomenis.
YAML failo supratimas
YAML (YAML Ain't Markup Language) failus sudaro raktų ir reikšmių poros, sąrašai ir įdėtos struktūros. YAML sintaksė sukurta taip, kad būtų vizualiai patraukli ir lengvai skaitoma. Dėl to jis yra populiarus konfigūracijos failų pasirinkimas su Kubernetes ir kitais orkestravimo įrankiai naudojant YAML.
Skirtingai nuo kitų duomenų formatų, pvz XML ir JSON, YAML remiasi įtrauka, kad atspindėtų hierarchiją.
Štai kaip galite apibrėžti pagrindinius laukus naudodami YAML:
vardas:JonasDoe
amžius:30
paštas:[email protected]
Dvitaškis atskiria raktą nuo jo reikšmės, kuri gali būti bet koks galiojantis YAML duomenų tipas, įskaitant eilutes, skaičius, loginius duomenis arba įdėtas struktūras.
Sąrašai leidžia reprezentuoti vertybių rinkinį. Norėdami apibrėžti sąrašą YAML, naudokite brūkšnelį ir tarpą prieš kiekvieną elementą:
vaisiai:
-obuolys
-bananas
-oranžinė
Čia vaisiai yra raktas, o brūkšnelių eilutės apibrėžia vaisių sąrašą.
YAML taip pat palaiko įdėtas struktūras, leidžiančias pateikti sudėtingas duomenų hierarchijas:
asmuo:
vardas:JonasDoe
amžius:30
adresas:
gatvė:123PagrindinisŠv
miestas:Anytown
Šalis:JAV
The asmuo rakte yra kitas rakto ir verčių porų rinkinys, sudarantis įdėtą struktūrą. The adresu raktas turi savo rakto-reikšmių porų rinkinį.
Darbas su YAML „Go“.
„Go“ neteikia integruotų YAML failų funkcijų, tačiau yra trečiųjų šalių paketų, kurie tai daro.
The yaml paketą yra populiarus paketas, skirtas darbui su YAML failais. Tai suteikia:
- Analizavimo ir serializavimo funkcijos.
- YAML žymų palaikymas.
- Išsamios YAML specifikacijos laikymasis.
- Tiksli skirstymo ir atskyrimo kontrolė.
- Klaidų tvarkymas.
- Suderinamumas su keliomis YAML versijomis.
Atidarykite savo terminalą ir paleiskite šią komandą, kad įdiegtumėte YAML paketą savo projektui:
# įdiekite 3 yaml paketo versiją
eik ir gauk gopkg.in/yaml.v3
Įdiegę paketą galite naudoti importuoti pareiškimą, kad importuotumėte paketą į „Go“ failus.
importuoti"gopkg.in/yaml.v3"
Galite pasirinkti kelias YAML versijas pagal YAML specifikacijos, kurią norite naudoti, versiją.
YAML to Go duomenų struktūrų skaitymas ir analizavimas
Viena iš pagrindinių užduočių, kurias norėsite atlikti, yra YAML to Go duomenų struktūrų analizė. The yaml paketas suteikia paprastą, patogią API, skirtą tai padaryti.
Apsvarstykite šiuos YAML duomenis:
# output.yaml
asmuo:
vardas:JonasDoe
amžius:30
paštas:[email protected]
Galite apibrėžti atitinkamą struktūrą su atitinkančiais laukų pavadinimais, kad išanalizuoti YAML duomenis į Go duomenų struktūrą su yaml paketą.
// Asmens struktūra reiškia asmens raktą YAML.
tipo Asmuo struktūra {
vardas styga`yaml: "vardas"".
Amžius tarpt„yaml“: „amžius“.
El. paštas styga`yaml: "el. paštas".
}
The yaml struct žymės padeda susieti YAML raktus su struct laukais analizės operacijos metu.
Štai kaip galite išanalizuoti YAML duomenis į Go duomenų struktūrą:
importuoti (
"fmt"
"gopkg.in/yaml.v3"
"os"
)funcpagrindinis() {
// perskaitykite failą output.yaml
duomenys, klaida := os. Skaityti failą ("output.yaml")jeigu klysta! = nulis {
panika(klaida)
}
// sukurti asmens struktūrą ir deserializuoti duomenis į tą struktūrą
var asmuo Asmuo
jeigu klysta := yaml. Unmarshal (duomenys, &person); klysta! = nulis {
panika(klaida)
}
// spausdinti laukus į konsolę
fmt. Printf("Vardas: %s\n", asmuo. Vardas)
fmt. Printf("Amžius: %d\n", asmuo. Amžius)
fmt. Printf("El. paštas: %s\n", asmuo. el. paštas)
}
The pagrindinis funkcija nuskaito išvestis.yaml failą su ioutil paketai Skaityti failą funkcija. Tada jis sukuria egzempliorių Asmuo struct ir analizuoja duomenis į struktūrą su Unmaršalas metodas yaml paketą. The pagrindinis funkcija spausdina laukus iš struct egzemplioriaus; štai rezultatas:
Duomenų įterpimas į YAML failą
Norėdami įterpti duomenis į YAML failus, galite naudoti Go duomenų struktūras. Štai kaip galite įterpti duomenis į YAML failą su egzemplioriumi Asmuo struktūra:
funcpagrindinis() {
// Sukurkite asmens struktūros egzempliorių su duomenų pavyzdžiais
asmuo := asmuo{
Vardas: "Jonas Doe",
Amžius: 30,
El. paštas: "[email protected]",
}// Suskirstykite asmens struktūrą į YAML formatą
duomenys, klaida := yaml. Maršalas (&asmuo)jeigu klysta! = nulis {
panika(klaida)
}// Įrašykite nuosekliuosius YAML duomenis į failą pavadinimu "output.yaml"
err = os. WriteFile("output.yaml", duomenys, 0644)jeigu klysta! = nulis {
panika(klaida)
}
fmt. Println("Duomenys įrašyti į output.yaml")
}
The asmuo kintamasis yra pavyzdys Asmuo struktūros tipas. Naudoti maršalas metodas yaml paketą, kad konvertuotumėte struktūrą į YAML. Jis paima struktūros pavyzdį ir grąžina YAML atvaizdą bei klaidą.
Galite naudoti Rašyti failą funkcija os paketą YAML duomenims įrašyti į failą (šiuo atveju, išvestis.yaml).
Po sėkmingos YAML duomenų serializavimo ir rašymo operacijos, pagrindinis funkcija išspausdina pranešimą į konsolę.
Galite sudėti ir panaikinti YAML į žemėlapius, kaip tai darote su struktūromis.
Čia yra YAML duomenų suskirstymo ir atskyrimo su žemėlapiais pavyzdys:
paketą pagrindinis
importuoti (
"fmt"
"gopkg.in/yaml.v3"
)funcpagrindinis() {
// Suskirstymo duomenys
duomenys := žemėlapį[styga]sąsaja{}{
"vardas": "Jonas Doe",
"amžius": 30,
"el. paštas": "[email protected]",
}// Duomenų skirstymas į YAML
yamlData, err := yaml. maršalas (duomenys)jeigu klysta! = nulis {
fmt. Println("Klaida tvarkant:", klaida)
grąžinti
}fmt. Println(„Paskirstyti YAML duomenys:“)
fmt. Println(styga(yamlData))// YAML duomenų išskyrimas į žemėlapį
var nesuderinami duomenys žemėlapį[styga]sąsaja{}
err = yaml. Unmarshal (yamlData, &unmarshalledData)jeigu klysta! = nulis {
fmt. Println("Klaida atšaukimo metu:", klaida)
grąžinti
}
fmt. Println("\nNesurinkti duomenys:")
fmt. Println (neišskirti duomenys)
}
Procesas yra toks pat kaip ir struktūrų tipai, išskyrus tai, kad duomenims pateikti naudojate žemėlapius. The Unmaršalas ir maršalas metodai tinka abiem duomenų tipams.
„Docker Compose“ konfigūravimui naudoja YAML failus
Darbas su YAML failais „Go“ suteikia galingą ir lankstų būdą valdyti konfigūracijos duomenis.
Vienas ryškus YAML failų naudojimo atvejis yra „Docker Compose“, kur YAML failas naudojamas kaip konfigūracija, skirta apibrėžti ir valdyti kelių konteinerių „Docker“ programas.
„Docker Compose“ naudoja YAML paprastumą ir skaitomumą, kad būtų galima apibrėžti paslaugas, tinklus, apimtis ir kitus konteinerinių programų komponentus, kad būtų lengva suderinti konteinerius.