Golang 使用 inline 处理 JSON/YAML 内联字段的 2 点注意事项
Golang 使用 inline 处理 JSON/YAML 内联字段的 2 点注意事项
建议点击 查看原文 查看最新内容。
原文链接: https://typonotes.com/posts/2024/01/09/golang-tag-inline/
这是一片错误笔记, 没什么高大上的东西。 简单记录一下在 Go 中使用 json 和 yaml 在解析字符串的时候没有太注意的一个点。
以 Json 为例, 通常我们在 struct结构 与 Json结构 的时候是 一一对应 的。
以下几种名字都是我自己取的, 不保证正确。
1. 平板型
平铺直叙, 没有任何波澜, 最简单的类型。
2. 嵌套型:
- 嵌套对象也支持引用/指针类型
- 嵌套对象可以是: struct, slice, map 等。
- 从某种角度来说, 平板型 可以被认为是一种 特殊 的 嵌套型, 被嵌套对象是 基础类型
- 嵌套对象是 具名嵌套
以上说的这两种情况是最常用的。
3. 内联型 (,inline)
在 tag 种使用 ,inline
关键值。 可以实现这种 内敛型:
从图中可以看到
- 左边: 使用了平板型的 Json 结构
- 右边: 使用了嵌套型的 struct 结构, 但又有一点差别。
需要 特别强调 的是:
- 需要使用 tag
inline
关键字, 但需要省略 字段映射名字。 所以 inline 前面有一个,
json:",inline"
- 字段 必须 是 匿名嵌套 的。
NOTE: 如果使用具名嵌套则,即使使用了 inline 也无效。 也是这种习惯造成我错误记忆的。
3.1 应用场景
我能想到最直观的,就是 k8s yaml 声明文件中的 api信息
|
|
对应的 yaml 文件
|
|
3.2 测试案例
|
|
- 原文链接:https://typonotes.com/posts/2024/01/09/golang-tag-inline/
- 本文为原创文章,转载注明出处。
- 欢迎 扫码关注公众号
Go与云原生
或 订阅网站 https://typonotes.com/ 。 - 第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「在看」,感谢支持。