Heim > Backend-Entwicklung > Golang > Golang Yaml-Daten ändern

Golang Yaml-Daten ändern

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2023-05-14 16:18:08
Original
943 Leute haben es durchsucht

Für Anwendungen, die mit Golang entwickelt wurden, sind neben den gängigen Datenspeichermethoden auch Datendateien im YAML-Format eine häufig verwendete Methode. Da Dateien im YAML-Format gut lesbar und klar strukturiert sind, werden sie häufig in verschiedenen Szenarien verwendet. Beispielsweise werden Kubernetes-Konfigurationsdateien im YAML-Format gespeichert. Wenn Sie Daten im YAML-Format ändern müssen, wie können Sie dies mit Golang erreichen? Im Folgenden wird die Änderung der YAML-Konfigurationsdatei von Kubernetes als Beispiel verwendet, um vorzustellen, wie Golang zur Implementierung verwendet wird.

Importieren Sie die erforderlichen Bibliotheken

Sie müssen die Bibliothek „gopkg.in/yaml.v2“ im Code verwenden, um Daten im YAML-Format zu lesen und zu ändern. Da die Go-Module des Abhängigkeitsverwaltungstools von Golang über eine eigene Abhängigkeitsverwaltungsfunktion verfügen, müssen wir nur auf diese Bibliothek verweisen.

import (
    "fmt"
    "io/ioutil"
    "gopkg.in/yaml.v2"
)
Nach dem Login kopieren

YAML-Daten lesen

Bevor Sie die YAML-Daten ändern, müssen Sie zunächst die YAML-Daten lesen. Hier können Sie die ReadFile-Funktion in der ioutil-Bibliothek verwenden, um die Datei zu lesen. Da es sich bei der Kubernetes-Konfigurationsdatei um ein Dokument handelt, das mehrere Objekte enthalten kann, müssen alle Objekte in der Datei durch „---“ getrennt werden.

func readYamlFile(filepath string) ([]map[interface{}]interface{}, error) {
    yamlFile, err := ioutil.ReadFile(filepath)
    if err != nil {
        return nil, err
    }
    var data []map[interface{}]interface{}
    for _, item := range bytes.Split(yamlFile, []byte("
---
")) {
        var obj map[interface{}]interface{}
        if err := yaml.Unmarshal(item, &obj); err != nil {
            return nil, err
        }
        data = append(data, obj)
    }
    return data, nil
}
Nach dem Login kopieren

Der Rückgabewert dieser Funktion ist ein Datentyp []map[interface{}]interface{}. Jedes Element stellt ein YAML-Objekt dar. In der Kubernetes-Konfigurationsdatei stellt jedes Objekt normalerweise eine Bereitstellung, einen Dienst oder einen Pod usw. dar .

YAML-Daten ändern

Angenommen, wir müssen die Replikate einer Bereitstellung von ursprünglich 3 auf 4 ändern, dann müssen wir das Bereitstellungsobjekt finden und dann den Wert des Felds „Replikate“ ändern. Da es sich bei jedem Datenfeld im YAML-Format um eine Karte handelt, ist es sehr einfach, den Wert eines bestimmten Felds zu ändern. Sie müssen lediglich die Karte finden, in der sich das Feld befindet, und dann den Wert dieser Karte ändern. Hier prüfen wir beim Durchlaufen jedes YAML-Objekts, ob es sich bei dem aktuellen um das Deployment handelt, das wir ändern müssen. Wenn ja, suchen wir das Feld „Replicas“ und ändern es.

func modifyYamlData(data []map[interface{}]interface{}, objectName string, fieldName string, fieldValue interface{}) error {
    for _, obj := range data {
        if obj["kind"] == "Deployment" && obj["metadata"].(map[interface{}]interface{})["name"] == objectName {
            spec := obj["spec"].(map[interface{}]interface{})
            replicas := spec["replicas"].(int)
            if replicas != fieldValue {
                spec["replicas"] = fieldValue
                yamlData, err := yaml.Marshal(data)
                if err != nil {
                    return err
                }
                return ioutil.WriteFile("k8s.yaml", yamlData, 0644)
            }
            break
        }
    }
    return nil
}
Nach dem Login kopieren

Die Parameter dieser Funktion sind die gelesenen YAML-Daten, der Objektname, der Attributname und der Attributwert, die geändert werden müssen. Wenn das zu ändernde Objekt gefunden und geändert wird, kann es direkt in die Datei geschrieben werden.

Vollständiger Code

Das Folgende ist ein vollständiges Programm zum Ändern des Replicas-Attributs der Bereitstellung in der Kubernetes-Konfigurationsdatei. Auf dieser Basis können Sie weitere Attribute erweitern und modifizieren.

package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
  
    "gopkg.in/yaml.v2"
)

func readYamlFile(filepath string) ([]map[interface{}]interface{}, error) {
    yamlFile, err := ioutil.ReadFile(filepath)
    if err != nil {
        return nil, err
    }
    var data []map[interface{}]interface{}
    for _, item := range bytes.Split(yamlFile, []byte("
---
")) {
        var obj map[interface{}]interface{}
        if err := yaml.Unmarshal(item, &obj); err != nil {
            return nil, err
        }
        data = append(data, obj)
    }
    return data, nil
}

func modifyYamlData(data []map[interface{}]interface{}, objectName string, fieldName string, fieldValue interface{}) error {
    for _, obj := range data {
        if obj["kind"] == "Deployment" && obj["metadata"].(map[interface{}]interface{})["name"] == objectName {
            spec := obj["spec"].(map[interface{}]interface{})
            replicas := spec["replicas"].(int)
            if replicas != fieldValue {
                spec["replicas"] = fieldValue
                yamlData, err := yaml.Marshal(data)
                if err != nil {
                    return err
                }
                return ioutil.WriteFile("k8s.yaml", yamlData, 0644)
            }
            break
        }
    }
    return nil
}

func main() {
    data, err := readYamlFile("k8s.yaml")
    if err != nil {
        fmt.Println(err)
        return
    }
    if err := modifyYamlData(data, "nginx", "replicas", 4); err != nil {
        fmt.Println(err)
        return
    }
}
Nach dem Login kopieren

Zusammenfassung

Anhand des obigen Codes können wir sehen, dass es relativ einfach ist, Golang zum Ändern von Daten im YAML-Format zu verwenden. Im Vergleich zu JSON ist YAML einfacher zu lesen und zu bearbeiten, und Golang bietet außerdem eine große Anzahl praktischer Tools zum Implementieren von Lese- und Schreibvorgängen für komplexe Datentypen. Daher ist die Verwendung von Golang zur Verarbeitung von YAML-Daten für Anwendungsszenarien, die komplexe Daten verarbeiten müssen, sehr gut geeignet.

Das obige ist der detaillierte Inhalt vonGolang Yaml-Daten ändern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage