خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه کار با فایل های YAML در Go

با استفاده از 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 آمده است:

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

دو نقطه کلید را از مقدار آن جدا می کند که می تواند هر نوع داده معتبر YAML شامل رشته ها، اعداد، بولی ها یا ساختارهای تودرتو باشد.

لیست ها به شما امکان می دهند مجموعه ای از مقادیر را نشان دهید. برای تعریف یک لیست در YAML، از یک خط فاصله قبل از هر مورد استفاده کنید:

fruits:
  - apple
  - banana
  - orange

در اینجا میوه ها کلید هستند و خطوط خط فاصله فهرستی از میوه ها را مشخص می کند.

YAML همچنین از ساختارهای تودرتو پشتیبانی می کند و به شما امکان می دهد سلسله مراتب داده های پیچیده را نشان دهید:

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

کلید شخص شامل مجموعه دیگری از جفت های کلید-مقدار است که یک ساختار تودرتو را تشکیل می دهد. کلید آدرس مجموعه ای از جفت های کلید-مقدار خاص خود را دارد.

مطلب مرتبط:   templateUrl و styleUrl در Angular چیست؟

کار با YAML در Go

Go عملکرد داخلی را برای فایل‌های YAML ارائه نمی‌کند، اما بسته‌های شخص ثالثی وجود دارند که این کار را انجام می‌دهند.

بسته yaml یک بسته محبوب برای کار با فایل های YAML است. فراهم می کند:

  • ویژگی های تجزیه و سریال سازی
  • پشتیبانی از تگ های YAML
  • انطباق جامع با مشخصات YAML.
  • کنترل ریزدانه بر مارشال کردن و مارشال کردن.
  • رسیدگی به خطا.
  • سازگاری با چندین نسخه YAML.

ترمینال خود را باز کنید و این دستور را برای نصب بسته YAML برای پروژه خود اجرا کنید:

# install version 3 of the yaml package
go get gopkg.in/yaml.v3

پس از نصب بسته، می توانید از دستور import برای وارد کردن بسته به فایل های Go خود استفاده کنید.

import "gopkg.in/yaml.v3"

می توانید چندین نسخه YAML را بر اساس نسخه مشخصات YAML که می خواهید استفاده کنید انتخاب کنید.

خواندن و تجزیه ساختارهای داده YAML to Go

یکی از کارهای ضروری که می خواهید انجام دهید تجزیه ساختارهای داده YAML to Go است. بسته yaml یک API ساده و راحت برای انجام این کار ارائه می دهد.

این داده های YAML را در نظر بگیرید:

# output.yaml

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

شما می توانید یک ساختار متناظر با نام فیلدهای منطبق برای تجزیه داده های YAML در ساختار داده Go با بسته yaml تعریف کنید.

// Person struct represents the person key in YAML.
type Person struct {
    Name string `yaml:"name"`
    Age int`yaml:"age"`
    Email string `yaml:"email"`
}

تگ‌های ساختار Yaml به نگاشت کلیدهای YAML به فیلدهای ساختار در طول عملیات تجزیه کمک می‌کنند.

مطلب مرتبط:   معرفی DeviceScript: ادغام یکپارچه اینترنت اشیاء با TypeScript

در اینجا نحوه تجزیه و تحلیل داده های YAML در ساختار داده Go آمده است:

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

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

    if err != nil {
        panic(err)
    }
    
    // create a person struct and deserialize the data into that struct
    var person Person

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

تابع اصلی فایل output.yaml را با تابع ReadFile بسته ioutil می خواند. سپس یک نمونه از ساختار Person ایجاد می کند و داده ها را با روش Unmarshal بسته yaml در ساختار تجزیه می کند. تابع main فیلدها را از نمونه ساختار چاپ می کند. نتیجه این است:

نتیجه خواندن فایل های YAML

درج داده ها در یک فایل YAML

می توانید از ساختارهای داده Go برای درج داده ها در فایل های YAML استفاده کنید. در اینجا نحوه وارد کردن داده ها به فایل YAML با نمونه ای از ساختار Person آمده است:

func main() {
    // Create an instance of the Person struct with sample data
    person := Person{
        Name: "John Doe",
        Age: 30,
        Email: "john.doe@example.com",
    }

    // Serialize the person struct into YAML format
    data, err := yaml.Marshal(&person)

    if err != nil {
        panic(err)
    }

    // Write the serialized YAML data to a file named "output.yaml"
    err = os.WriteFile("output.yaml", data, 0644)

    if err != nil {
        panic(err)
    }

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

متغیر person نمونه ای از نوع ساختار Person است. برای تبدیل ساختار به YAML از روش Marshal بسته yaml استفاده کنید. نمونه ساختار را می گیرد و نمایش YAML و یک خطا را برمی گرداند.

مطلب مرتبط:   نحوه ایجاد پاور آپ و کلکسیون در گودو

می توانید از تابع WriteFile بسته os برای نوشتن داده های YAML در فایل خود (در این مورد output.yaml) استفاده کنید.

پس از موفقیت آمیز بودن عملیات سریال سازی و نوشتن اطلاعات YAML، تابع اصلی پیامی را به کنسول چاپ می کند.

نتیجه نوشتن در فایل YAML است

همانطور که با ساختارها انجام می دهید می توانید YAML را در نقشه ها مارشال و از هم جدا کنید.

در اینجا نمونه ای از مارشال کردن و حذف داده های YAML با نقشه ها آورده شده است:

package main

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

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

    // Marshaling the data into YAML
    yamlData, err := yaml.Marshal(data)

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

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

    // Unmarshalling the YAML data into a map
    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)
}

این فرآیند مانند انواع ساختار است، با این تفاوت که شما از نقشه ها برای نمایش داده ها استفاده می کنید. متدهای Unmarshal و Marshal برای هر دو نوع داده کار می کنند.

Docker Compose از فایل های YAML برای پیکربندی استفاده می کند

کار با فایل های YAML در Go یک رویکرد قدرتمند و انعطاف پذیر برای مدیریت داده های پیکربندی ارائه می دهد.

یکی از موارد استفاده برجسته برای فایل‌های YAML، Docker Compose است که در آن یک فایل YAML به عنوان پیکربندی برای تعریف و مدیریت برنامه‌های Docker چند کانتینری عمل می‌کند.

Docker Compose از سادگی و خوانایی YAML برای تعریف سرویس‌ها، شبکه‌ها، حجم‌ها و سایر مؤلفه‌های برنامه‌های کاربردی کانتینری استفاده می‌کند تا هماهنگی کانتینر را آسان کند.