באמצעות YAML, אתה יכול לכתוב תוכניות Go הפועלות יחד עם אחרים באמצעות פורמט הנתונים. זה קריא אנושי, כל כך קל לעבוד איתו.

YAML הוא פורמט פופולרי לקריאה בסידרת נתונים. שפת הנתונים מתאימה לקובצי תצורה, חילופי נתונים ואחסון נתונים מובנה.

פרויקטים רבים מבוססי Go, כולל Gqlgen וכלי בנייה כמו Docker-compose, משתמשים בקבצי YAML להגדרה. כמפתח Go, אתה יכול להשתמש בכלים כמו חבילת yaml כדי לנתח ולתפעל נתוני YAML.

הבנת קובץ YAML

קבצי YAML (YAML Ain't Markup Language) מורכבים מצמדי מפתח-ערך, רשימות ומבנים מקוננים. תחביר YAML נועד להיות מושך ויזואלית וקל לקריאה. זה הופך אותו לבחירה פופולרית עבור קובצי תצורה, עם Kubernetes ואחרים כלי תזמור באמצעות YAML.

שלא כמו פורמטים אחרים של נתונים כמו XML ו-JSON, YAML מסתמך על הזחה כדי לייצג היררכיה.

כך תוכל להגדיר שדות בסיסיים עם YAML:

שֵׁם:ג'וןצְבִיָה
גיל:30
אימייל:[email protected]

נקודתיים מפריד את המפתח מהערך שלו, שיכול להיות כל סוג נתונים חוקי של YAML כולל מחרוזות, מספרים, בוליאנים או מבנים מקוננים.

רשימות מאפשרות לך לייצג אוסף של ערכים. כדי להגדיר רשימה ב-YAML, השתמש במקף ואחריו רווח לפני כל פריט:

instagram viewer
פירות:
-תפוח עץ
-בננה
-תפוז

כאן, פירות הוא המפתח, והשורות המקופות מגדירות רשימה של פירות.

YAML תומך גם במבנים מקוננים, המאפשרים לך לייצג היררכיות נתונים מורכבות:

אדם:
שֵׁם:ג'וןצְבִיָה
גיל:30
כתובת:
רְחוֹב:123רָאשִׁירחוב
עִיר:כל עיר
מדינה:ארה"ב

ה אדם מפתח מכיל קבוצה נוספת של זוגות מפתח-ערך, היוצרים מבנה מקונן. ה כתובת למפתח יש קבוצה משלו של זוגות מפתח-ערך.

עבודה עם YAML ב-Go

Go לא מספקת פונקציונליות מובנית עבור קבצי YAML, אבל יש חבילות של צד שלישי שכן.

ה יאמל חֲבִילָה היא חבילה פופולרית לעבודה עם קבצי YAML. זה מספק:

  • תכונות ניתוח והסדרה.
  • תמיכה בתגיות YAML.
  • תאימות מקיפה למפרט YAML.
  • שליטה דקיקה בגיבוש ושחרור.
  • טיפול בשגיאות.
  • תאימות למספר גרסאות YAML.

פתח את המסוף שלך והפעל את הפקודה הזו כדי להתקין את חבילת YAML עבור הפרויקט שלך:

# התקן את גרסה 3 של חבילת yaml
לך קבל את gopkg.in/yaml.v3

לאחר התקנת החבילה, תוכל להשתמש ב- יְבוּא הצהרה כדי לייבא את החבילה לקבצי ה-Go שלך.

יְבוּא"gopkg.in/yaml.v3"

אתה יכול לבחור גרסאות YAML מרובות על סמך הגרסה של מפרט YAML שבה ברצונך להשתמש.

קריאה וניתוח של מבני נתונים של YAML to Go

משימה חיונית אחת שתרצה לבצע היא ניתוח מבני נתונים של YAML to Go. ה יאמל החבילה מספקת API פשוט ונוח לעשות זאת.

שקול את נתוני ה-YAML הבאים:

# output.yaml

אדם:
שֵׁם:ג'וןצְבִיָה
גיל:30
אימייל:[email protected]

אתה יכול להגדיר מבנה תואם עם שמות שדות תואמים כדי לנתח את נתוני YAML לתוך מבנה נתונים Go עם יאמל חֲבִילָה.

// מבנה האדם מייצג את מפתח האדם ב-YAML.
סוּג אדם struct {
שֵׁם חוּט`yaml:"שם"`
גיל int`yaml:"גיל"`
אימייל חוּט`yaml:"אימייל"`
}

ה יאמל תגי struct עוזרים למפות את מפתחות ה-YAML לשדות ה-struct במהלך פעולת הניתוח.

כך תוכל לנתח את נתוני YAML למבנה נתונים של Go:

יְבוּא (
"fmt"
"gopkg.in/yaml.v3"
"os"
)

funcרָאשִׁי() {
// קרא את הקובץ output.yaml
נתונים, שגיאה := os. ReadFile("output.yaml")

אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}

// צור מבנה של אדם והסר את הנתונים לתוך המבנה הזה
var אדם אדם

אם טעות := יאמל. Unmarshal (נתונים, &person); טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}

// הדפס את השדות למסוף
fmt. Printf("שם: %s\n", אדם. שֵׁם)
fmt. Printf("גיל: %d\n", אדם. גיל)
fmt. Printf("אימייל: %s\n", אדם. אימייל)
}

ה רָאשִׁי הפונקציה קוראת את output.yaml קובץ עם ה יוטיל של החבילה ReadFile פוּנקצִיָה. לאחר מכן הוא יוצר מופע של אדם struct ומנתח את הנתונים למבנה עם ה- לא מרשל שיטת ה יאמל חֲבִילָה. ה רָאשִׁי function מדפיסה את השדות ממופע ה-struct; הנה התוצאה:

הכנסת נתונים לקובץ YAML

אתה יכול להשתמש במבני נתונים של Go כדי להוסיף נתונים לקבצי YAML. כך תוכל להוסיף נתונים לקובץ YAML עם מופע של אדם מבנה:

funcרָאשִׁי() {
// צור מופע של מבנה האדם עם נתונים לדוגמה
אדם := אדם{
שֵׁם: "פלוני אלמוני",
גיל: 30,
אימייל: "[email protected]",
}

// הסדר את מבנה האדם לפורמט YAML
נתונים, טעות := yaml. מרשל (&אדם)

אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}

// כתוב את נתוני ה-YAML המסודרים לקובץ בשם "output.yaml"
שגיאה = os. WriteFile("output.yaml", נתונים, 0644)

אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}

fmt. Println("הנתונים נכתבו ל-output.yaml")
}

ה אדם משתנה הוא מופע של ה אדם סוג מבנה. להשתמש ב מַרשַׁל שיטת ה יאמל חבילה כדי להמיר את ה-struct ל-YAML. זה לוקח את המופע של המבנה ומחזיר את ייצוג YAML ושגיאה.

אתה יכול להשתמש ב WriteFile פונקציה של OS חבילה כדי לכתוב את נתוני YAML לקובץ שלך (במקרה זה, output.yaml).

לאחר פעולת סידור וכתיבה מוצלחת של נתונים של YAML, ה רָאשִׁי הפונקציה מדפיסה הודעה לקונסולה.

אתה יכול לסדר ולשחרר את YAML למפות כפי שאתה עושה עם מבנים.

הנה דוגמה לרישום ושחרור של נתוני YAML עם מפות:

חֲבִילָה רָאשִׁי

יְבוּא (
"fmt"
"gopkg.in/yaml.v3"
)

funcרָאשִׁי() {
// נתונים למארשלינג
נתונים := מַפָּה[חוּט]מִמְשָׁק{}{
"שֵׁם": "פלוני אלמוני",
"גיל": 30,
"אימייל": "[email protected]",
}

// שילוב הנתונים לתוך YAML
yamlData, טעות := yaml. מרשל (נתונים)

אם טעות != אֶפֶס {
fmt. Println("שגיאה במהלך המרתף:", טעות)
לַחֲזוֹר
}

fmt. Println("נתוני YAML מרשלים:")
fmt. Println(חוּט(yamlData))

// העברת נתוני YAML למפה
var unmarshalledData מַפָּה[חוּט]מִמְשָׁק{}
טעות = יאמל. Unmarshal (yamlData, &unmarshalledData)

אם טעות != אֶפֶס {
fmt. Println("שגיאה במהלך ביטול הסדר:", טעות)
לַחֲזוֹר
}

fmt. Println("\nנתונים לא מסומנים:")
fmt. Println (unmarshalledData)
}

התהליך זהה לזה של סוגי מבנה, פרט לכך שאתה משתמש במפות לייצוג הנתונים. ה לא מרשל ו מַרשַׁל השיטות פועלות עבור שני סוגי הנתונים.

Docker Compose משתמש בקבצי YAML עבור תצורה

עבודה עם קבצי YAML ב-Go מספקת גישה חזקה וגמישה לניהול נתוני תצורה.

מקרה שימוש בולט אחד עבור קבצי YAML הוא Docker Compose, שבו קובץ YAML משמש כתצורה להגדרה וניהול של יישומי Docker מרובים.

Docker Compose ממנפת את הפשטות והקריאות של YAML כדי להגדיר שירותים, רשתות, נפחים ורכיבים אחרים של יישומים מכולים כדי להקל על תזמור מיכל.