Rumah > Artikel > pembangunan bahagian belakang > Teg tersuai YAML dalam Go
editor php Banana memperkenalkan anda kepada teg tersuai YAML dalam bahasa Go. YAML ialah format siri data yang ringan, dan bahasa Go, sebagai bahasa pengaturcaraan yang berkuasa, secara semula jadi menyediakan sokongan untuk YAML. Dalam Go, kami boleh mentakrifkan struktur data YAML melalui teg tersuai untuk menghuraikan dan memproses data YAML dengan lebih baik. Dengan menggunakan teg tersuai, kami boleh memetakan data YAML dengan mudah kepada struktur dalam Go untuk mencapai pemprosesan data yang lebih fleksibel dan mudah. Perkara berikut akan memperkenalkan secara terperinci penggunaan dan langkah berjaga-jaga bagi teg tersuai YAML dalam Go.
Saya mempunyai struktur bersarang ini dan menambahkan teg tersuai pada sifatnya,
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"` }
Saya mencipta beberapa kejadian palsu dan menambahkannya pada kepingan,
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)
Akhirnya saya menyusun data dan menulisnya ke fail
yamlData, err := yaml.Marshal(&dummies) // handle error ... writeErr := os.WriteFile("foo.yaml", yamlData, 0644) // handle write error ...
Tetapi yaml yang saya dapat tidak mempunyai nama tag huruf kecil tetapi mempunyai nama struktur huruf besar. Adakah sesiapa tahu mengapa ini berlaku dan bagaimana untuk memperbaikinya?
Salahkan pelaksanaan yaml yang anda gunakan. Sebagai contoh, jika anda menggunakan gopkg.in/yaml.v3
,它就可以工作。在 go playground 上尝试一下。因此,一种解决方案是使用另一种 yaml 实现,例如 gopkg.in/yaml.v3
.
Anda menyebut dalam ulasan yang anda gunakan https:///pkg.go.dev/sigs.k8s.io/[email protected]. Dokumentasi pakejnya berkata:
Ringkasnya, perpustakaan ini mula-mula menggunakan go-yaml untuk menukar yaml kepada json dan kemudian menggunakan json.marshal
和 json.unmarshal
与结构进行转换。这意味着它有效地重用了 json 结构标签以及自定义 json 方法 marshaljson
和 unmarshaljson
, yang berbeza daripada go-yaml.
Jadi sigs.k8s.io/b3ee0cdfce799cc4f5c03349abedaab7[email protected]5db79b134e9f6b82c0b36e0489ee08ed
第一个编组到 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"` }
Dengan perubahan ini, output mengandungi nama huruf kecil (cuba di go taman permainan):
- name: a params: param1: foo param2: bar type: type a - name: b params: param1: foo param2: bar type: type b
Sila ambil perhatian bahawa tag json
标签而不是 yaml
才能使其工作只是 sigs.k8s.io/b6f0719079302bafe55ff76bc7d76648[电子邮件受保护]5db79b134e9f6b82c0b36e0489ee08ed
包。如果您想让它与这个包和其他yaml实现一起使用,您可以提供两者 json
和 yaml
mesti digunakan:
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"` }
Atas ialah kandungan terperinci Teg tersuai YAML dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!