Χρησιμοποιώντας το YAML, μπορείτε να γράψετε προγράμματα Go που διαλειτουργούν με άλλα χρησιμοποιώντας τη μορφή δεδομένων. Είναι αναγνώσιμο από τον άνθρωπο, τόσο εύκολο να το δουλέψεις.

Το YAML είναι μια δημοφιλής μορφή σειριοποίησης δεδομένων αναγνώσιμη από τον άνθρωπο. Η γλώσσα δεδομένων είναι κατάλληλη για αρχεία διαμόρφωσης, ανταλλαγή δεδομένων και δομημένη αποθήκευση δεδομένων.

Πολλά έργα που βασίζονται στο Go, συμπεριλαμβανομένου του Gqlgen και εργαλείων δημιουργίας όπως το Docker-compose, χρησιμοποιούν αρχεία YAML για διαμόρφωση. Ως προγραμματιστής Go, μπορείτε να χρησιμοποιήσετε εργαλεία όπως το πακέτο yaml για να αναλύσετε και να χειριστείτε τα δεδομένα YAML.

Κατανόηση ενός αρχείου YAML

Τα αρχεία YAML (YAML Ain't Markup Language) αποτελούνται από ζεύγη κλειδιών-τιμών, λίστες και ένθετες δομές. Η σύνταξη YAML έχει σχεδιαστεί για να είναι οπτικά ελκυστική και ευανάγνωστη. Αυτό το καθιστά δημοφιλή επιλογή για αρχεία διαμόρφωσης, με Kubernetes και άλλα εργαλεία ενορχήστρωσης χρησιμοποιώντας YAML.

instagram viewer

Σε αντίθεση με άλλες μορφές δεδομένων όπως XML και JSON, το YAML βασίζεται στην εσοχή για να αναπαραστήσει την ιεραρχία.

Δείτε πώς μπορείτε να ορίσετε βασικά πεδία με το YAML:

όνομα:ΓιάννηςΕλαφίνα
ηλικία:30
ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ:[email protected]

Μια άνω και κάτω τελεία διαχωρίζει το κλειδί από την τιμή του, η οποία μπορεί να είναι οποιοσδήποτε έγκυρος τύπος δεδομένων YAML, συμπεριλαμβανομένων συμβολοσειρών, αριθμών, δυαδικών ή ένθετων δομών.

Οι λίστες σάς επιτρέπουν να αντιπροσωπεύετε μια συλλογή τιμών. Για να ορίσετε μια λίστα στο YAML, χρησιμοποιήστε μια παύλα ακολουθούμενη από ένα κενό πριν από κάθε στοιχείο:

φρούτα:
-μήλο
-μπανάνα
-πορτοκάλι

Εδώ, φρούτα είναι το κλειδί και οι γραμμές με παύλες ορίζουν μια λίστα φρούτων.

Το YAML υποστηρίζει επίσης ένθετες δομές, επιτρέποντάς σας να αναπαραστήσετε σύνθετες ιεραρχίες δεδομένων:

πρόσωπο:
όνομα:ΓιάννηςΕλαφίνα
ηλικία:30
διεύθυνση:
δρόμος:123ΚύριοςΑγ
πόλη:Οποιαδήποτε πόλη
Χώρα:ΗΠΑ

ο πρόσωπο Το κλειδί περιέχει ένα άλλο σύνολο ζευγών κλειδιού-τιμής, που σχηματίζουν μια ένθετη δομή. ο διεύθυνση κλειδί έχει το δικό του σύνολο ζευγών κλειδιού-τιμής.

Εργασία με το YAML στο Go

Το Go δεν παρέχει ενσωματωμένη λειτουργικότητα για αρχεία YAML, αλλά υπάρχουν πακέτα τρίτων που παρέχουν.

ο 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. ο yaml Το πακέτο παρέχει ένα απλό, βολικό API για να το κάνετε αυτό.

Εξετάστε αυτά τα δεδομένα YAML:

# output.yaml

πρόσωπο:
όνομα:ΓιάννηςΕλαφίνα
ηλικία:30
ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ:[email protected]

Μπορείτε να ορίσετε μια αντίστοιχη δομή με τα αντίστοιχα ονόματα πεδίων για την ανάλυση των δεδομένων YAML σε μια δομή δεδομένων Go με το yaml πακέτο.

// Η δομή ατόμου αντιπροσωπεύει το κλειδί ατόμου στο YAML.
τύπος Πρόσωπο struct {
Ονομα σειρά`yaml:"όνομα"`
Ηλικία ενθ`yaml:"ηλικία"`
ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ σειρά`yaml:"email"`
}

ο yaml Οι ετικέτες struct βοηθούν στην αντιστοίχιση των κλειδιών YAML στα πεδία struct κατά τη διάρκεια της λειτουργίας ανάλυσης.

Δείτε πώς μπορείτε να αναλύσετε τα δεδομένα YAML σε μια δομή δεδομένων Go:

εισαγωγή (
"fmt"
"gopkg.in/yaml.v3"
"os"
)

funcκύριος() {
// διαβάστε το αρχείο output.yaml
data, err := os. ReadFile("output.yaml")

αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}

// δημιουργήστε μια δομή ατόμου και απαριθμήστε τα δεδομένα σε αυτήν τη δομή
var πρόσωπο Πρόσωπο

αν err := yaml. Unmarshal (δεδομένα, &person); λάθος!= μηδέν {
πανικός(πλανώμαι)
}

// εκτυπώστε τα πεδία στην κονσόλα
fmt. Printf("Όνομα: %s\n", πρόσωπο. Ονομα)
fmt. Printf("Ηλικία: %d\n", πρόσωπο. Ηλικία)
fmt. Printf("Ηλεκτρονικό ταχυδρομείο: %s\n", πρόσωπο. ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ)
}

ο κύριος η συνάρτηση διαβάζει το έξοδος.yaml αρχείο με το ioutil του πακέτου ReadFile λειτουργία. Στη συνέχεια δημιουργεί ένα παράδειγμα του Πρόσωπο struct και αναλύει τα δεδομένα στη δομή με το Ανεξάρτητος μέθοδος του yaml πακέτο. ο κύριος Η συνάρτηση εκτυπώνει τα πεδία από την παρουσία της δομής. ιδού το αποτέλεσμα:

Εισαγωγή δεδομένων σε αρχείο YAML

Μπορείτε να χρησιμοποιήσετε δομές δεδομένων Go για να εισαγάγετε δεδομένα σε αρχεία YAML. Δείτε πώς μπορείτε να εισαγάγετε δεδομένα σε ένα αρχείο YAML με μια παρουσία του Πρόσωπο δομή:

funcκύριος() {
// Δημιουργήστε μια παρουσία της δομής Person με δείγματα δεδομένων
άτομο := Πρόσωπο{
Ονομα: "John Doe",
Ηλικία: 30,
ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ: "[email protected]",
}

// Σειριοποίηση της δομής ατόμου σε μορφή YAML
data, err := yaml. Στρατάρχης (&πρόσωπο)

αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}

// Γράψτε τα σειριακά δεδομένα YAML σε ένα αρχείο με το όνομα "output.yaml"
err = os. WriteFile("output.yaml", δεδομένα, 0644)

αν λάθος!= μηδέν {
πανικός(πλανώμαι)
}

fmt. Println("Δεδομένα γραμμένα στο output.yaml")
}

ο πρόσωπο η μεταβλητή είναι ένα παράδειγμα του Πρόσωπο τύπος κατασκευής. Χρησιμοποιήστε το Διευθετώ μέθοδος του yaml πακέτο για τη μετατροπή της δομής σε YAML. Παίρνει το παράδειγμα της δομής και επιστρέφει την αναπαράσταση YAML και ένα σφάλμα.

Μπορείτε να χρησιμοποιήσετε το WriteFile λειτουργία του os πακέτο για να γράψετε τα δεδομένα YAML στο αρχείο σας (σε αυτήν την περίπτωση, έξοδος.yaml).

Μετά από μια επιτυχημένη λειτουργία σειριοποίησης και εγγραφής δεδομένων YAML, το κύριος λειτουργία εκτυπώνει ένα μήνυμα στην κονσόλα.

Μπορείτε να προσαρμόσετε και να αποδεσμεύσετε το YAML σε χάρτες όπως κάνετε με τα structs.

Ακολουθεί ένα παράδειγμα ομαδοποίησης και αφαίρεσης δεδομένων YAML με χάρτες:

πακέτο κύριος

εισαγωγή (
"fmt"
"gopkg.in/yaml.v3"
)

funcκύριος() {
// Δεδομένα για ομαδοποίηση
δεδομένα := χάρτης[σειρά]διεπαφή{}{
"όνομα": "John Doe",
"ηλικία": 30,
"ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ": "[email protected]",
}

// Συνδυασμός των δεδομένων στο YAML
yamlData, err := yaml. Marshal (δεδομένα)

αν λάθος!= μηδέν {
fmt. Println("Σφάλμα κατά τη σύνταξη:", λάθος)
ΕΠΙΣΤΡΟΦΗ
}

fmt. Println("Marshaled YAML data:")
fmt. Println(σειρά(yamlData))

// Αποσυναρμολόγηση των δεδομένων YAML σε έναν χάρτη
var unmarshalledData χάρτης[σειρά]διεπαφή{}
err = yaml. Unmarshal (yamlData, &unmarshalledData)

αν λάθος!= μηδέν {
fmt. Println("Σφάλμα κατά την αφαίρεση:", λάθος)
ΕΠΙΣΤΡΟΦΗ
}

fmt. Println("\nΜη μαρκαρισμένα δεδομένα:")
fmt. Println (unmarshalledData)
}

Η διαδικασία είναι η ίδια όπως για τύπους κατασκευών, εκτός από το ότι χρησιμοποιείτε χάρτες για την αναπαράσταση δεδομένων. ο Ανεξάρτητος και Διευθετώ Οι μέθοδοι λειτουργούν και για τους δύο τύπους δεδομένων.

Το Docker Compose χρησιμοποιεί αρχεία YAML για διαμόρφωση

Η εργασία με αρχεία YAML στο Go παρέχει μια ισχυρή και ευέλικτη προσέγγιση για τη διαχείριση των δεδομένων διαμόρφωσης.

Μια εξέχουσα περίπτωση χρήσης για αρχεία YAML είναι το Docker Compose, όπου ένα αρχείο YAML χρησιμεύει ως διαμόρφωση για τον καθορισμό και τη διαχείριση εφαρμογών Docker πολλαπλών κοντέινερ.

Το Docker Compose αξιοποιεί την απλότητα και την αναγνωσιμότητα του YAML για να ορίσει υπηρεσίες, δίκτυα, τόμους και άλλα στοιχεία εφαρμογών με κοντέινερ για να διευκολύνει την ενορχήστρωση κοντέινερ.