Dengan menggunakan YAML, Anda dapat menulis program Go yang saling beroperasi dengan yang lain menggunakan format data. Ini dapat dibaca manusia, sangat mudah untuk dikerjakan.
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 lainnya alat orkestrasi menggunakan YAML.
Tidak seperti format data lainnya seperti XML dan JSON, YAML mengandalkan indentasi untuk merepresentasikan hierarki.
Inilah cara Anda dapat menentukan bidang dasar dengan YAML:
nama:YohanesKelinci betina
usia:30
surel:[email protected]
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:
buah-buahan:
-apel
-pisang
-oranye
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:
orang:
nama:YohanesKelinci betina
usia:30
alamat:
jalan:123UtamaSt
kota:Kota mana saja
negara:Amerika Serikat
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:
# instal versi 3 dari paket yaml
dapatkan gopkg.in/yaml.v3
Setelah menginstal paket, Anda dapat menggunakan impor pernyataan untuk mengimpor paket ke file Go Anda.
impor"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:
# keluaran.yaml
orang:
nama:YohanesKelinci betina
usia:30
surel:[email protected]
Anda dapat menentukan struct yang sesuai dengan nama field yang cocok untuk mem-parsing data YAML ke dalam struktur data Go dengan yaml kemasan.
// Person struct merepresentasikan kunci person di YAML.
jenis Orang struct {
Nama rangkaian`yaml:"nama"`
Usia int`yaml:"umur"`
Surel rangkaian`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:
impor (
"fmt"
"gopkg.in/yaml.v3"
"os"
)fungsiutama() {
// baca file output.yaml
data, salah := os. File Baca("keluaran.yaml")jika salah!= nol {
panik(berbuat salah)
}
// buat struct orang dan deserialisasi data ke dalam struct itu
var orang Orang
jika salah := yaml. Unmarshal (data, & orang); salah!= nol {
panik(berbuat salah)
}
// cetak bidang ke konsol
fmt. Cetakf("Nama: %s\n", orang. Nama)
fmt. Cetakf("Umur: %d\n", orang. Usia)
fmt. Cetakf("Email: %s\n", orang. Surel)
}
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:
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:
fungsiutama() {
// Buat instance dari struct Person dengan data sampel
orang := Orang{
Nama: "John Doe",
Usia: 30,
Surel: "[email protected]",
}// Serialkan struct orang ke dalam format YAML
data, err := yaml. Marsekal(& orang)jika salah!= nol {
panik(berbuat salah)
}// Tulis data YAML berseri ke file bernama "output.yaml"
salah = os. WriteFile("keluaran.yaml", data, 0644)jika salah!= nol {
panik(berbuat salah)
}
fmt. Cetak("Data ditulis ke 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.
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:
kemasan utama
impor (
"fmt"
"gopkg.in/yaml.v3"
)fungsiutama() {
// Data untuk marshaling
data := peta[rangkaian]antarmuka{}{
"nama": "John Doe",
"usia": 30,
"surel": "[email protected]",
}// Mengatur data ke dalam YAML
yamlData, err := yaml. Marsekal (data)jika salah!= nol {
fmt. Cetak("Kesalahan selama marshaling:", salah)
kembali
}fmt. Cetak("Data YAML yang diatur:")
fmt. Cetak(rangkaian(yamlData))// Unmarshalling data YAML ke dalam peta
var unmarshalledData peta[rangkaian]antarmuka{}
err = yaml. Unmarshal (yamlData, &unmarshalledData)jika salah!= nol {
fmt. Cetak("Kesalahan saat unmarshalling:", salah)
kembali
}
fmt. Cetak("\nData yang tidak diatur:")
fmt. Println (UnmarshalledData)
}
Prosesnya sama dengan untuk 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.