我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Go 中的 YAML 自定义标签

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Go 中的 YAML 自定义标签

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 中的 YAML 自定义标签的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Go 中的 YAML 自定义标签

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Go 中的 YAML 自定义标签

php小编香蕉为您介绍Go语言中的YAML自定义标签。YAML是一种轻量级的数据序列化格式,而Go语言作为一种强大的编程语言,自然也提供了对YAML的支持。在Go中,我们可以通过自定义标签来定义YAML的数据结构,以便更好地解析和处理YAM
Go 中的 YAML 自定义标签
2024-02-10

Java中和使用自定义标签

这篇文章将为大家详细讲解有关Java中和使用自定义标签,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。简单例子实现一个标签分为两步:(1)继承SimpleTagSupport或TagSuppo
2023-05-30

JSP怎么自定义标签

这篇文章主要讲解了“JSP怎么自定义标签”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JSP怎么自定义标签”吧!创建”Hello”标签接下来,我们想创建一个自定义标签叫作,标签格式为:要创建
2023-06-27

html 自定义标签怎么弄

html自定义标签用于表示应用程序特定元素,创建方法如下:定义标签:使用customelements.define()创建标签,例如""。使用标签:在文档正文中使用自定义标签,例如"内容"。访问属性和方法:使用".getattribute(
html 自定义标签怎么弄
2024-05-16

Spring开发中如何实现自定义标签

今天就跟大家聊聊有关Spring开发中如何实现自定义标签,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Spring框架是现在Java最流行的开源框架之一,并且Spring下的各种子项
2023-05-31

DEDECMS 扩展标签和dede自定义标签实现方法

我们需要知道下扩展标签的存放目录及文件名构成,首先,扩展的标签都是存放在/include/taglib这个目录,名称都是以“标签名.lib.php”格式,例如{dede:channel/}标签对应的是channel.
2022-06-12

Django5中怎么自定义过滤器和标签

这篇文章将为大家详细讲解有关Django5中怎么自定义过滤器和标签,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。  目录结构  1.(创建)在主目录下创建名为common的python包(自
2023-06-02

vue中标签自定义属性的使用及说明

这篇文章主要介绍了vue中标签自定义属性的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-19

java怎么自定义标签实现类

要自定义一个标签实现类,需要按照以下步骤进行操作:创建一个类,该类需要实现javax.servlet.jsp.tagext.Tag接口或其子接口,如javax.servlet.jsp.tagext.SimpleTag或javax.servl
java怎么自定义标签实现类
2023-10-28

Z-blog自定义标签使用教程

关键字描述:教程 使用 标签 定义 < " > pclass 日期 css