Cara Bekerja Dengan File YAML di Go

YAML adalah format serialisasi data yang dapat dibaca manusia. Bahasa data cocok untuk file konfigurasi, pertukaran data, dan penyimpanan data terstruktur.


Banyak proyek berbasis Go, termasuk Gqlgen dan alat bangun seperti Docker-compose, menggunakan file YAML untuk konfigurasi. Sebagai pengembang Go, Anda dapat menggunakan alat seperti paket yaml untuk mengurai dan memanipulasi data YAML.


Memahami File YAML

File YAML (YAML Ain’t Markup Language) terdiri dari key-value pair, daftar, dan struktur bersarang. Sintaks YAML dirancang agar menarik secara visual dan mudah dibaca. Ini menjadikannya pilihan populer untuk file konfigurasi, dengan Kubernetes dan alat orkestrasi lainnya menggunakan YAML.

Tidak seperti format data lain seperti XML dan JSON, YAML mengandalkan indentasi untuk merepresentasikan hierarki.

Inilah cara Anda dapat menentukan bidang dasar dengan YAML:

 name: John Doe
age: 30
email: john.doe@example.com

Tanda titik dua memisahkan kunci dari nilainya, yang bisa berupa tipe data YAML apa pun yang valid termasuk string, angka, boolean, atau struktur bersarang.

Daftar memungkinkan Anda untuk mewakili kumpulan nilai. Untuk menentukan daftar di YAML, gunakan tanda hubung diikuti spasi sebelum setiap item:

 fruits:
  - apple
  - banana
  - orange

Di Sini, buah-buahan adalah kuncinya, dan garis dengan tanda penghubung menentukan daftar buah.

YAML juga mendukung struktur bersarang, memungkinkan Anda merepresentasikan hierarki data yang kompleks:

 person:
  name: John Doe
  age: 30
  address:
    street: 123 Main St
    city: Anytown
    country: USA

Itu orang kunci berisi kumpulan pasangan kunci-nilai lainnya, membentuk struktur bersarang. Itu alamat key memiliki kumpulan key-value pair-nya sendiri.

Bekerja dengan YAML di Go

Go tidak menyediakan fungsionalitas bawaan untuk file YAML, tetapi ada paket pihak ketiga yang menyediakannya.

Itu yaml kemasan adalah paket populer untuk bekerja dengan file YAML. Ini menyediakan:

  • Fitur parsing dan serialisasi.
  • Dukungan untuk tag YAML.
  • Kepatuhan spesifikasi YAML yang komprehensif.
  • Kontrol halus atas marshalling dan unmarshalling.
  • Penanganan kesalahan.
  • Kompatibilitas dengan beberapa versi YAML.

Buka terminal Anda dan jalankan perintah ini untuk menginstal paket YAML untuk proyek Anda:

 
go get gopkg.in/yaml.v3

Setelah menginstal paket, Anda dapat menggunakan impor pernyataan untuk mengimpor paket ke file Go Anda.

 import "gopkg.in/yaml.v3"

Anda dapat memilih beberapa versi YAML berdasarkan versi spesifikasi YAML yang ingin Anda gunakan.

Membaca dan Mem-parsing YAML ke Struktur Data Go

Satu tugas penting yang ingin Anda lakukan adalah mem-parsing struktur data YAML to Go. Itu yaml package menyediakan API yang sederhana dan nyaman untuk melakukan ini.

Pertimbangkan data YAML ini:

 

person:
  name: John Doe
  age: 30
  email: john.doe@example.com

Anda dapat menentukan struct yang sesuai dengan nama field yang cocok untuk mem-parsing data YAML ke dalam struktur data Go dengan yaml kemasan.

 
type Person struct {
    Name string `yaml:"name"`
    Age int `yaml:"age"`
    Email string `yaml:"email"`
}

Itu yaml tag struct membantu memetakan kunci YAML ke bidang struct selama operasi penguraian.

Inilah cara Anda mengurai data YAML ke dalam struktur data Go:

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

func main() {
    
    data, err := os.ReadFile("output.yaml")

    if err != nil {
        panic(err)
    }
    
    
    var person Person

    if err := yaml.Unmarshal(data, &person); err != nil {
        panic(err)
    }
  
    
    fmt.Printf("Name: %s\n", person.Name)
    fmt.Printf("Age: %d\n", person.Age)
    fmt.Printf("Email: %s\n", person.Email)
}

Itu utama fungsi membaca output.yaml mengajukan dengan ioutil paket ReadFile fungsi. Ini kemudian membuat instance dari Orang struct dan mem-parsing data ke dalam struct dengan Unmarshal metode dari yaml kemasan. Itu utama function mencetak field dari instance struct; inilah hasilnya:

hasil membaca file YAML

Memasukkan Data ke dalam File YAML

Anda dapat menggunakan struktur data Go untuk memasukkan data ke dalam file YAML. Inilah cara Anda memasukkan data ke file YAML dengan instance dari Orang struktur:

 func main() {
    
    person := Person{
        Name: "John Doe",
        Age: 30,
        Email: "john.doe@example.com",
    }

    
    data, err := yaml.Marshal(&person)

    if err != nil {
        panic(err)
    }

    
    err = os.WriteFile("output.yaml", data, 0644)

    if err != nil {
        panic(err)
    }

    fmt.Println("Data written to output.yaml")
}

Itu orang variabel adalah turunan dari Orang tipe struct. Menggunakan Marsekal metode dari yaml paket untuk mengonversi struct ke YAML. Dibutuhkan instance dari struct dan mengembalikan representasi YAML dan kesalahan.

Anda dapat menggunakan WriteFile fungsi dari os paket untuk menulis data YAML ke file Anda (dalam hal ini, output.yaml).

Setelah sukses serialisasi data YAML dan operasi tulis, utama fungsi mencetak pesan ke konsol.

hasil dari penulisan ke file YAML

Anda dapat mengatur dan menghapus YAML ke dalam peta seperti yang Anda lakukan dengan struct.

Berikut adalah contoh menyusun dan menghapus data YAML dengan peta:

 package main

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

func main() {
    
    data := map[string]interface{}{
        "name": "John Doe",
        "age": 30,
        "email": "johndoe@example.com",
    }

    
    yamlData, err := yaml.Marshal(data)

    if err != nil {
        fmt.Println("Error during marshaling:", err)
        return
    }

    fmt.Println("Marshaled YAML data:")
    fmt.Println(string(yamlData))

    
    var unmarshalledData map[string]interface{}
    err = yaml.Unmarshal(yamlData, &unmarshalledData)

    if err != nil {
        fmt.Println("Error during unmarshalling:", err)
        return
    }

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

Prosesnya sama dengan tipe struct, kecuali Anda menggunakan peta untuk representasi data. Itu Unmarshal Dan Marsekal metode bekerja untuk kedua tipe data.

Docker Compose Menggunakan File YAML untuk Konfigurasi

Bekerja dengan file YAML di Go memberikan pendekatan yang andal dan fleksibel untuk mengelola data konfigurasi.

Salah satu kasus penggunaan yang menonjol untuk file YAML adalah Docker Compose, di mana file YAML berfungsi sebagai konfigurasi untuk mendefinisikan dan mengelola aplikasi Docker multi-kontainer.

Docker Compose memanfaatkan kesederhanaan dan keterbacaan YAML untuk menentukan layanan, jaringan, volume, dan komponen lain dari aplikasi dalam container untuk memudahkan orkestrasi container.

Tags

Related Post