Go (Golang) में YAML के साथ काम करना - gopkg.in/yaml.v3 लाइब्रेरी

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go (Golang) में YAML के साथ काम करना — gopkg.in/yaml.v3 लाइब्रेरी

YAML (YAML Ain't Markup Language) एक लोकप्रिय डेटा सीरियलाइज़ेशन फ़ॉर्मेट है, जिसका उपयोग अक्सर कॉन्फ़िगरेशन फ़ाइलों, API (OpenAPI/Swagger) विवरण, CI/CD पाइपलाइनों (GitLab CI, GitHub Actions) और Docker Compose के लिए किया जाता है। Go (Golang) इकोसिस्टम में YAML के साथ काम करने के लिए कोई मानक लाइब्रेरी नहीं है, इसलिए डेवलपर्स शक्तिशाली और स्थिर थर्ड-पार्टी लाइब्रेरी gopkg.in/yaml.v3 का उपयोग करते हैं। इस लेख में, हम विस्तार से जानेंगे कि Go में YAML को कैसे पढ़ें, लिखें और प्रोसेस करें।

लाइब्रेरी इंस्टॉल करना

शुरू करने के लिए, अपने प्रोजेक्ट में पैकेज जोड़ें:

go get gopkg.in/yaml.v3

इसके बाद, इसे अपने कोड में इम्पोर्ट करें:

import "gopkg.in/yaml.v3"

YAML के साथ काम करने के लिए मुख्य स्ट्रक्चर

yaml.v3 लाइब्रेरी निम्नलिखित सुविधाएँ प्रदान करती है:

  • मार्शलिंग (Marshal) — Go स्ट्रक्चर को YAML स्ट्रिंग में बदलना।
  • अनमार्शलिंग (Unmarshal) — YAML स्ट्रिंग को Go स्ट्रक्चर में पार्स करना।
  • स्ट्रीम पार्सिंग (Decoder/Encoder) फ़ाइलों के साथ काम करने के लिए।
  • टैग yaml:"fieldname" फ़ील्ड नामों को कस्टमाइज़ करने के लिए।

उदाहरण 1: स्ट्रिंग से YAML पढ़ना

सबसे सरल मामला — YAML स्ट्रिंग को Go स्ट्रक्चर में पार्स करना:

package main

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

type Config struct {
    Server struct {
        Port int    `yaml:"port"`
        Host string `yaml:"host"`
    } `yaml:"server"`
    Database struct {
        User string `yaml:"user"`
        Pass string `yaml:"pass"`
    } `yaml:"database"`
}

func main() {
    yamlData := `
server:
  port: 8080
  host: "localhost"
database:
  user: "admin"
  pass: "secret"
`
    var cfg Config
    err := yaml.Unmarshal([]byte(yamlData), &cfg)
    if err != nil {
        panic(err)
    }
    fmt.Printf("सर्वर: %s:%d\n", cfg.Server.Host, cfg.Server.Port)
    fmt.Printf("डेटाबेस: %s\n", cfg.Database.User)
}

उदाहरण 2: YAML को फ़ाइल में लिखना

YAML फ़ाइल में डेटा लिखने के लिए yaml.Marshal और फ़ाइल सिस्टम में लिखने का उपयोग करें:

package main

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

type AppConfig struct {
    Name    string `yaml:"name"`
    Version string `yaml:"version"`
    Debug   bool   `yaml:"debug"`
}

func main() {
    config := AppConfig{
        Name:    "MyApp",
        Version: "1.0.0",
        Debug:   true,
    }

    data, err := yaml.Marshal(&config)
    if err != nil {
        panic(err)
    }

    err = os.WriteFile("config.yaml", data, 0644)
    if err != nil {
        panic(err)
    }
    println("config.yaml फ़ाइल बन गई")
}

उदाहरण 3: नेस्टेड और जटिल स्ट्रक्चर के साथ काम करना

YAML लिस्ट, map-स्ट्रक्चर और गहरी नेस्टिंग को सपोर्ट करता है। यहाँ सर्वरों की लिस्ट को पार्स करने का उदाहरण है:

package main

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

type Service struct {
    Name    string   `yaml:"name"`
    Ports   []int    `yaml:"ports"`
    Enabled bool     `yaml:"enabled"`
}

type Deployment struct {
    Version  string    `yaml:"version"`
    Services []Service `yaml:"services"`
}

func main() {
    input := `
version: "2.1"
services:
  - name: web
    ports: [80, 443]
    enabled: true
  - name: api
    ports: [3000]
    enabled: false
`
    var dep Deployment
    if err := yaml.Unmarshal([]byte(input), &dep); err != nil {
        panic(err)
    }

    for _, s := range dep.Services {
        fmt.Printf("सेवा %s: पोर्ट %v, सक्रिय: %t\n", s.Name, s.Ports, s.Enabled)
    }
}

स्ट्रीम रीडिंग और राइटिंग (Decoder/Encoder)

बड़ी फ़ाइलों या डेटा स्ट्रीम के साथ काम करने के लिए yaml.Decoder और yaml.Encoder का उपयोग करें:

package main

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

func main() {
    // Encoder का उदाहरण
    var buf bytes.Buffer
    encoder := yaml.NewEncoder(&buf)
    // ... कोड जारी है
}

अनुशंसाएँ