我们经常在Go开源项目或是公司项目中看到为嵌入的结构体字段加上 json:",inline" 标签,并解释说这是为了让嵌入的结构体中包含的字段直接成为外层结构体的字段,而非嵌套在外层 JSON 对象的下一级:

但是在实际写代码尝试时却发现,加不加 `json:“inline”` 标签效果都是一样的,省略字段名的嵌入的结构体字段在不额外设置 `json` 标签时,会默认内联(和外层JSON合并到同一级)处理,而正常的带字段名的结构体字段不管加不加该标签最终都是会生成嵌套的JSON:

随后我又查阅了官方文档没有看到关于 inline的介绍,在 encoding/json 源码中搜索该关键字也没有搜索到,所以怀疑是不是历史版本中曾支持过该标签,但现在已经废弃了,但经过一番搜索后确认,官方 encoding/json 库从来就没有支持过inline标签,该用法纯属于以讹传讹,且在 Kubernetes 项目中就大量使用


不过,该标签可能会在将来的 encoding/json/v2 版本中得到支持,该版本目前仍属于实验性质的功能,且未来该标签的表现会不会出现变化还不确定,所以最好删除当前项目中用到的该标签:




1万+

被折叠的 条评论
为什么被折叠?



