php小編香蕉為您介紹Go語言中的YAML自訂標籤。 YAML是一種輕量級的資料序列化格式,而Go語言作為一種強大的程式語言,自然也提供了對YAML的支援。在Go中,我們可以透過自訂標籤來定義YAML的資料結構,以便更好地解析和處理YAML資料。透過使用自訂標籤,我們可以在Go中輕鬆地將YAML資料映射到結構體中,實現更靈活、方便的資料處理。以下將詳細介紹Go中的YAML自訂標籤的使用方法和注意事項。
我在 go 中有這些嵌套結構,並為其屬性添加了自訂標籤,
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"` }
我創建了一些 dummy 實例並將它們添加到切片中,
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)
最後我整理資料並將其寫入檔案
yamlData, err := yaml.Marshal(&dummies) // handle error ... writeErr := os.WriteFile("foo.yaml", yamlData, 0644) // handle write error ...
但是我得到的 yaml 沒有小寫標記名稱,而是有大寫結構名稱。 有人知道為什麼會發生這種情況以及如何解決它嗎?
歸咎於您正在使用的 yaml 實作。例如,如果您使用 gopkg.in/yaml.v3
,它就可以工作。在 go playground 上嘗試。因此,一種解決方案是使用另一種 yaml 實現,例如 gopkg.in/yaml.v3
。
您在評論中提到您正在使用 https:// /pkg.go.dev/sigs.k8s.io/[電子郵件受保護]。它的套件文檔說:
簡而言之,該函式庫首先使用 go-yaml 將 yaml 轉換為 json,然後使用 json.marshal
和 json.unmarshal
與結構進行轉換。這意味著它有效地重複使用了 json 結構標籤以及自訂 json 方法 marshaljson
和 unmarshaljson
,這與 go-yaml 不同。
所以sigs.k8s.io/<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2c554d41406c5a1d021f021c">[email」]> /a>
第一個編組到json。如果您想要小寫的欄位名稱,請使用 json
標籤而不是 yaml
標籤:
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"` }
透過此更改,輸出包含小寫名稱(在 go playground 上嘗試):
- name: a params: param1: foo param2: bar type: type a - name: b params: param1: foo param2: bar type: type b
請注意,必須使用json
標籤而不是yaml
才能使其工作只是sigs.k8s.io/<a href="/cdn-cgi/ l/email-protection" class="__cf_email__" 的一個怪癖data-cfemail="047d6569684472352a372a34">[電子郵件受保護]</a>
套件。如果您想讓它與這個套件和其他yaml實作一起使用,您可以提供兩者 json
和yaml
標籤:
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"` }
以上是Go 中的 YAML 自訂標籤的詳細內容。更多資訊請關注PHP中文網其他相關文章!