json - 在golang中编辑继承属性的标签?

标签 json go

type Parent struct {
    Name string `json:"parent_name"`
}

type Child struct {
    Parent
}

假设我有两个结构ParentChild。我有两个端点使用这两个结构读取 json

// Sample Parent endpoint payload
{
    "parent_name": "Parent Name"
}

// Sample Child endpoint payload
{
    "child_name": "Child Name"
}

这两个结构都用于存储类似的数据,但每个端点有效负载的 json 键不同。有没有办法编辑 Child 结构上的 json 标记,以便 Child 仍然继承自 Parent,但是标签现在是 json:"child_name"?

最佳答案

Go 没有继承,只有组合。不要考虑父子关系,而是从部分-整体的角度来思考。

在您的示例中,您可以混合使用 json:",omitempty" 标记和“字段阴影”来获取结果:

type Parent struct {
    Name string `json:"parent_name,omitempty"`
}

type Child struct {
    Parent
    Name string `json:"child_name"`
}

Playground :http://play.golang.org/p/z72dCKOhYC .

但这仍然没有捕获要点(如果 child.Parent.Name 不为空,则会中断)。如果您要“覆盖”每个嵌入 Parent 的结构中的字段,为什么它首先存在?

关于json - 在golang中编辑继承属性的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34718094/

相关文章:

java - Retrofit 2 Json返回列表为空

objective-c - 检查复杂 JSON 响应中的空键

orm - 无法使用Beego的ORM .All()

windows - 从 Go 程序调用 Windows 批处理文件,以便它在新窗口中打开

go - 我可以对返回 2 个参数的方法使用单个变量吗

go 项目构建失败 : lfstackPack redeclared in this block

constructor - "constructors"是否有标准的惯用 Go?

java - 改造 2.0 + GSON + Android : Unable to invoke no-args constructor for interface retrofit2. http.Body

ios - 如何实现延迟json文件下载?

javascript - 将 php 数组传递给 json 文件 (PHP ->Json->JS)