l'éditeur php Banana vous présente les balises personnalisées YAML en langage Go. YAML est un format léger de sérialisation de données et le langage Go, en tant que langage de programmation puissant, prend naturellement en charge YAML. Dans Go, nous pouvons définir la structure des données YAML via des balises personnalisées pour mieux analyser et traiter les données YAML. En utilisant des balises personnalisées, nous pouvons facilement mapper les données YAML aux structures dans Go pour obtenir un traitement des données plus flexible et plus pratique. Ce qui suit présente en détail l'utilisation et les précautions des balises personnalisées YAML dans Go.
J'ai ces structures imbriquées en cours et j'ai ajouté des balises personnalisées à leurs propriétés,
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"` }
J'ai créé des instances factices et les ai ajoutées à la tranche,
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)
Enfin, j'organise les données et je les écris dans un fichier
yamlData, err := yaml.Marshal(&dummies) // handle error ... writeErr := os.WriteFile("foo.yaml", yamlData, 0644) // handle write error ...
Mais le yaml que je reçois n'a pas de noms de balises en minuscules mais des noms de structure en majuscules. Est-ce que quelqu'un sait pourquoi cela se produit et comment y remédier ?
La faute à l'implémentation yaml que vous utilisez. Par exemple, si vous utilisez gopkg.in/yaml.v3
,它就可以工作。在 go playground 上尝试一下。因此,一种解决方案是使用另一种 yaml 实现,例如 gopkg.in/yaml.v3
.
Vous avez mentionné dans les commentaires que vous utilisez https:///pkg.go.dev/sigs.k8s.io/[email protected]. La documentation de son package dit :
En bref, cette bibliothèque utilise d'abord go-yaml pour convertir yaml en json, puis utilise json.marshal
和 json.unmarshal
与结构进行转换。这意味着它有效地重用了 json 结构标签以及自定义 json 方法 marshaljson
和 unmarshaljson
, ce qui est différent de go-yaml.
Alors sigs.k8s.io/<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2c554d41406c5a1d021f021c">[email protected]</a>
第一个编组到 json。如果您想要小写的字段名称,请使用 json
标签而不是 yaml
Tag :
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"` }
Avec ce changement, la sortie contient des noms en minuscules (essayez-le sur le go Playground) :
- name: a params: param1: foo param2: bar type: type a - name: b params: param1: foo param2: bar type: type b
Veuillez noter que le tag json
标签而不是 yaml
才能使其工作只是 sigs.k8s.io/<a href="/cdn-cgi/l/email-protection" class="__cf_email__" 的一个怪癖data-cfemail="047d6569684472352a372a34">[电子邮件受保护]</a>
包。如果您想让它与这个包和其他yaml实现一起使用,您可以提供两者 json
和 yaml
doit être utilisé :
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"` }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!