日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

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.marshaljson.unmarshal 與結構進行轉換。這意味著它有效地重用了 json 結構標簽以及自定義 json 方法 marshaljsonunmarshaljson ,這與 go-yaml 不同。

所以 sigs.k8s.io/[email?protected] 第一個編組到 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/[電子郵件受保護] 包。如果您想讓它與這個包和其他yaml實現一起使用,您可以提供兩者 jsonyaml 標簽:

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語言
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定