Cách làm việc với các tệp YAML trong Go
YAML là một định dạng tuần tự hóa dữ liệu phổ biến mà con người có thể đọc được. Ngôn ngữ dữ liệu phù hợp với các tệp cấu hình, trao đổi dữ liệu và lưu trữ dữ liệu có cấu trúc.
Nhiều dự án dựa trên Go, bao gồm Gqlgen và các công cụ xây dựng như Docker-compose, sử dụng các tệp YAML để cấu hình. Là nhà phát triển Go, bạn có thể sử dụng các công cụ như gói yaml để phân tích và thao tác dữ liệu YAML.
Mục Lục
Hiểu tệp YAML
Các tệp YAML (YAML Ain’t Markup Language) bao gồm các cặp khóa-giá trị, danh sách và cấu trúc lồng nhau. Cú pháp YAML được thiết kế để hấp dẫn trực quan và dễ đọc. Điều này khiến nó trở thành lựa chọn phổ biến cho các tệp cấu hình, với Kubernetes và các công cụ điều phối khác sử dụng YAML.
Không giống như các định dạng dữ liệu khác như XML và JSON, YAML dựa vào thụt đầu dòng để thể hiện cấu trúc phân cấp.
Đây là cách bạn có thể xác định các trường cơ bản với YAML:
name: John Doe
age: 30
email: john.doe@example.com
Dấu hai chấm phân tách khóa khỏi giá trị của nó, có thể là bất kỳ loại dữ liệu YAML hợp lệ nào bao gồm chuỗi, số, booleans hoặc cấu trúc lồng nhau.
Danh sách cho phép bạn đại diện cho một tập hợp các giá trị. Để xác định danh sách trong YAML, hãy sử dụng dấu gạch nối theo sau là khoảng trắng trước mỗi mục:
fruits:
- apple
- banana
- orange
Đây, hoa quả là khóa và các dòng có gạch nối xác định danh sách các loại trái cây.
YAML cũng hỗ trợ các cấu trúc lồng nhau, cho phép bạn biểu diễn các hệ thống phân cấp dữ liệu phức tạp:
person:
name: John Doe
age: 30
address:
street: 123 Main St
city: Anytown
country: USA
Các người key chứa một tập hợp các cặp khóa-giá trị khác, tạo thành một cấu trúc lồng nhau. Các Địa chỉ khóa có tập hợp các cặp khóa-giá trị riêng.
Làm việc với YAML trong Go
Go không cung cấp chức năng tích hợp sẵn cho các tệp YAML, nhưng có các gói của bên thứ ba cung cấp chức năng này.
Các khoai mỡ gói là gói phổ biến để làm việc với các tệp YAML. Nó cung cấp:
- Các tính năng phân tích cú pháp và tuần tự hóa.
- Hỗ trợ các thẻ YAML.
- Tuân thủ đặc điểm kỹ thuật YAML toàn diện.
- Kiểm soát chi tiết đối với sắp xếp theo thứ tự và không sắp xếp lại.
- Xử lý lỗi.
- Khả năng tương thích với nhiều phiên bản YAML.
Mở terminal của bạn và chạy lệnh này để cài đặt gói YAML cho dự án của bạn:
go get gopkg.in/yaml.v3
Sau khi cài đặt gói, bạn có thể sử dụng nhập khẩu câu lệnh để nhập gói vào tệp Go của bạn.
import "gopkg.in/yaml.v3"
Bạn có thể chọn nhiều phiên bản YAML dựa trên phiên bản của đặc tả YAML mà bạn muốn sử dụng.
Đọc và phân tích cú pháp YAML để chuyển cấu trúc dữ liệu
Một nhiệm vụ thiết yếu mà bạn sẽ muốn thực hiện là phân tích cấu trúc dữ liệu YAML to Go. Các khoai mỡ gói cung cấp một API đơn giản, thuận tiện để thực hiện việc này.
Xem xét dữ liệu YAML này:
person:
name: John Doe
age: 30
email: john.doe@example.com
Bạn có thể xác định cấu trúc tương ứng với tên trường phù hợp để phân tích cú pháp dữ liệu YAML thành cấu trúc dữ liệu Go bằng khoai mỡ bưu kiện.
type Person struct {
Name string `yaml:"name"`
Age int `yaml:"age"`
Email string `yaml:"email"`
}
Các khoai mỡ Các thẻ cấu trúc giúp ánh xạ các khóa YAML tới các trường cấu trúc trong quá trình phân tích cú pháp.
Đây là cách bạn có thể phân tích cú pháp dữ liệu YAML thành cấu trúc dữ liệu 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: %sn", person.Name)
fmt.Printf("Age: %dn", person.Age)
fmt.Printf("Email: %sn", person.Email)
}
Các chủ yếu chức năng đọc đầu ra.yaml tập tin với ioutil gói của Đọc tài liệu chức năng. Sau đó, nó tạo ra một thể hiện của Người struct và phân tích cú pháp dữ liệu thành cấu trúc với nguyên soái phương pháp của khoai mỡ bưu kiện. Các chủ yếu hàm in các trường từ thể hiện cấu trúc; đây là kết quả:
Chèn dữ liệu vào tệp YAML
Bạn có thể sử dụng cấu trúc dữ liệu Go để chèn dữ liệu vào tệp YAML. Đây là cách bạn có thể chèn dữ liệu vào tệp YAML với một phiên bản của Người cấu trúc:
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")
}
Các người biến là một thể hiện của Người kiểu cấu trúc. Sử dụng nguyên soái phương pháp của khoai mỡ gói để chuyển đổi cấu trúc thành YAML. Nó lấy ví dụ của cấu trúc và trả về biểu diễn YAML và một lỗi.
Bạn có thể dùng Viết tập tin chức năng của hệ điều hành để ghi dữ liệu YAML vào tệp của bạn (trong trường hợp này, đầu ra.yaml).
Sau khi thao tác ghi và tuần tự hóa dữ liệu YAML thành công, chủ yếu chức năng in một tin nhắn đến bàn điều khiển.
Bạn có thể sắp xếp và sắp xếp YAML thành các bản đồ giống như bạn làm với các cấu trúc.
Đây là một ví dụ về sắp xếp và sắp xếp lại dữ liệu YAML bằng bản đồ:
package mainimport (
"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)
}
Quá trình này giống như đối với các loại cấu trúc, ngoại trừ việc bạn đang sử dụng bản đồ để biểu diễn dữ liệu. Các nguyên soái Và nguyên soái phương pháp làm việc cho cả hai loại dữ liệu.
Docker Compose sử dụng tệp YAML để cấu hình
Làm việc với các tệp YAML trong Go cung cấp một cách tiếp cận mạnh mẽ và linh hoạt để quản lý dữ liệu cấu hình.
Một trường hợp sử dụng nổi bật cho tệp YAML là Docker Compose, trong đó tệp YAML đóng vai trò là cấu hình để xác định và quản lý các ứng dụng Docker nhiều vùng chứa.
Docker Compose tận dụng tính đơn giản và dễ đọc của YAML để xác định dịch vụ, mạng, ổ đĩa và các thành phần khác của ứng dụng được chứa để giúp việc điều phối vùng chứa trở nên dễ dàng.