YAML Parser
YAML tahlilchisi
YAML — konfiguratsiya fayllarida keng qo'llaniladigan, odam o'qishi oson bo'lgan ma'lumot formati (Docker Compose, Kubernetes, CI/CD Pipeline'lari uning ustida quriladi). Eng sodda shaklida, bitta YAML hujjati shunchaki kalit: qiymat qatorlaridan iborat:
name: laptop
price: 999.99
category: electronicsBitta faylda bir nechta hujjat bo'lishi mumkin — bular faqat --- (uchta chiziqcha) yozilgan qatori bilan bir-biridan ajratiladi. Bu ko'p hujjatli YAML (multi-document YAML) deb ataladi, va odatda bitta faylda bir nechta yozuvni (masalan, mahsulotlar to'plamini) tasvirlash uchun ishlatiladi:
name: laptop
price: 999.99
category: electronics
---
name: mouse
price: 19.99
category: electronicsBu kursda siz shu formatni Go orqali tahlil qiladigan (parse) kichik Pipeline qurasiz. Haqiqiy loyihalarda buning uchun tashqi kutubxona (masalan gopkg.in/yaml.v3) ishlatiladi, lekin bu darslar muhitida faqat standart kutubxona mavjud. Yaxshiyamki, buning hech qanday zarari yo'q — YAML'ning shu tekis (flat), ichma-ich tuzilmasiz shaklini siz allaqachon bilgan vositalar bilan, qo'lda tahlil qilish mumkin: strings.Split va Composite Types kursidagi map andazalari.
Bitta hujjatni tahlil qilish
Hujjatni qatorlarga bo'ling, har birini tozalang, va har bir qatorni birinchi : bo'yicha ikkiga ajrating — chap tomoni kalit, o'ng tomoni qiymat:
for _, line := range strings.Split(doc, "\n") {
line = strings.TrimSpace(line)
if line == "" {
continue // bo'sh qatorlarni o'tkazib yuboring
}
parts := strings.SplitN(line, ":", 2)
key := strings.TrimSpace(parts[0])
value := strings.TrimSpace(parts[1])
// ...natijaga saqlang
}strings.SplitN(s, sep, 2) — strings.Splitning cheklangan varianti: u ko'pi bilan 2 ta bo'lakka ajratadi. Bu muhim, chunki qiymatning o'zida ham : bo'lishi mumkin (masalan, vaqt 12:30 kabi) — cheksiz Split bunday qiymatni buzib qo'yardi.
Ko'p hujjatni tahlil qilish
Butun kirishni "---" bo'yicha bo'lib, har bir bo'lakni alohida hujjat sifatida tahlil qilasiz. Ajratuvchi atrofidagi bo'sh qatorlar tashvishlanishga arzimaydi — ular allaqachon yozib bo'lgan ParseDocumentingiz tomonidan o'tkazib yuboriladi.
>_ Exercise
Bitta tekis YAML hujjatini kalit: qiymat juftliklari mapiga aylantiradigan ParseDocument(doc string) map[string]string funksiyasini yozing.
Butun ko'p hujjatli kirishni "---" bo'yicha bo'lib, har birini ParseDocument bilan tahlil qilib, natijalar slicasini qaytaradigan ParseYAML(input string) []map[string]string funksiyasini yozing.
Misol:
- •
ParseYAML("name: laptop\nprice: 999.99\n---\nname: mouse\nprice: 19.99")ikkita mapdan iborat slice qaytaradi: birinchisida{"name": "laptop", "price": "999.99"}, ikkinchisida{"name": "mouse", "price": "19.99"}
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Tashqi kutubxonasiz oddiy matn formatini tahlil qilish uchun strings.Split va strings.SplitN yetarli bo'lishi mumkin. SplitNdan foydalaning, agar qiymatning o'zida ajratuvchi belgi uchrashi mumkin bo'lsa.
NEXT UP
Data Transformer
$ go run main.go
Kodingizni ishga tushiring