php-Editor Banana stellt Ihnen benutzerdefinierte YAML-Tags in der Go-Sprache vor. YAML ist ein leichtes Datenserialisierungsformat, und die Go-Sprache bietet als leistungsstarke Programmiersprache natürlich Unterstützung für YAML. In Go können wir die YAML-Datenstruktur durch benutzerdefinierte Tags definieren, um YAML-Daten besser zu analysieren und zu verarbeiten. Durch die Verwendung benutzerdefinierter Tags können wir YAML-Daten problemlos Strukturen in Go zuordnen, um eine flexiblere und bequemere Datenverarbeitung zu erreichen. Im Folgenden werden die Verwendung und Vorsichtsmaßnahmen von benutzerdefinierten YAML-Tags in Go ausführlich vorgestellt.
Ich habe diese verschachtelten Strukturen in go und habe benutzerdefinierte Tags zu ihren Eigenschaften hinzugefügt,
type dummyparams struct { param1 string `yaml:"param1"` param2 string `yaml:"param2"` } type dummy struct { name string `yaml:"name"` type string `yaml:"type"` params dummyparams `yaml:"params"` }
Ich habe einige Dummy-Instanzen erstellt und sie dem Slice hinzugefügt,
dummies := make([]dummy, 0) dummy1 := dummy { name: "a" type: "type a" params: dummyparams { param1: "foo" param2: "bar" } } dummies = append(dummies, dummy1) dummy2 := dummy { name: "b" type: "type b" params: dummyparams { param1: "foo" param2: "bar" } } dummies = append(dummies, dummy2)
Schließlich organisiere ich die Daten und schreibe sie in eine Datei
yamlData, err := yaml.Marshal(&dummies) // handle error ... writeErr := os.WriteFile("foo.yaml", yamlData, 0644) // handle write error ...
Aber das Yaml, das ich bekomme, hat keine Tag-Namen in Kleinbuchstaben, sondern Strukturnamen in Großbuchstaben. Weiß jemand, warum das passiert und wie man es beheben kann?
Schuld daran ist die Yaml-Implementierung, die Sie verwenden. Wenn Sie beispielsweise gopkg.in/yaml.v3
,它就可以工作。在 go playground 上尝试一下。因此,一种解决方案是使用另一种 yaml 实现,例如 gopkg.in/yaml.v3
verwenden.
Sie haben in den Kommentaren erwähnt, dass Sie https:///pkg.go.dev/sigs.k8s.io/[email protected] verwenden. In der Paketdokumentation heißt es:
Kurz gesagt, diese Bibliothek verwendet zuerst go-yaml, um Yaml in JSON zu konvertieren, und verwendet dann json.marshal
和 json.unmarshal
与结构进行转换。这意味着它有效地重用了 json 结构标签以及自定义 json 方法 marshaljson
和 unmarshaljson
, was sich von go-yaml unterscheidet.
Also sigs.k8s.io/<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2c554d41406c5a1d021f021c">[email protected]</a>
第一个编组到 json。如果您想要小写的字段名称,请使用 json
标签而不是 yaml
Schlagwort:
import "sigs.k8s.io/yaml" type dummyparams struct { param1 string `json:"param1"` param2 string `json:"param2"` } type dummy struct { name string `json:"name"` type string `json:"type"` params dummyparams `json:"params"` }
Mit dieser Änderung enthält die Ausgabe Namen in Kleinbuchstaben (versuchen Sie es auf dem go-Spielplatz):
- name: a params: param1: foo param2: bar type: type a - name: b params: param1: foo param2: bar type: type b
Bitte beachten Sie, dass das json
标签而不是 yaml
才能使其工作只是 sigs.k8s.io/<a href="/cdn-cgi/l/email-protection" class="__cf_email__" 的一个怪癖data-cfemail="047d6569684472352a372a34">[电子邮件受保护]</a>
包。如果您想让它与这个包和其他yaml实现一起使用,您可以提供两者 json
和 yaml
-Tag verwendet werden muss:
type DummyParams struct { Param1 string `json:"param1" yaml:"param1"` Param2 string `json:"param2" yaml:"param2"` } type Dummy struct { Name string `json:"name" yaml:"name"` Type string `json:"type" yaml:"type"` Params DummyParams `json:"params" yaml:"params"` }
Das obige ist der detaillierte Inhalt vonBenutzerdefinierte YAML-Tags in Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!