You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Pub/Sub无法接收嵌套字段问题求助

问题根源与解决方案

核心原因

你的问题出在结构体字段定义方式和Go语言JSON序列化的规则上:

  1. 匿名字段导致结构平级展开:你在Payload中使用了Image和Thumbnail作为匿名字段,Go的json.Marshal会将嵌套结构体的字段直接平级到父结构体的JSON中,而非保留嵌套对象结构。同时如果两个嵌套结构体有同名字段(比如URL、Width),后序列化的字段会覆盖前者。
  2. 字段导出问题:如果你实际代码中Image/Thumbnail的字段是小写开头(非导出字段),json包会直接忽略这些字段,导致序列化后的JSON完全缺失嵌套字段内容。

另外你期望的是嵌套JSON结构,但当前匿名字段的写法无法实现这一需求。

解决方案

修改发送端和接收端的结构体定义,使用命名嵌套字段,同时确保所有需要序列化的字段都是大写开头(导出字段):

修改后的结构体代码

type Payload struct {
    ID        string     `json:"ID"`
    Type      string     `json:"Type"`
    Name      string     `json:"Name"`
    Image     Image      `json:"Image"`     // 命名字段,保留嵌套结构
    Thumbnail Thumbnail  `json:"Thumbnail"` // 命名字段,保留嵌套结构
}

type Image struct {
    URL    string `json:"URL"`
    Width  string `json:"Width"`
    Height string `json:"Height"`
}

type Thumbnail struct {
    URL    string `json:"URL"`
    Width  string `json:"Width"`
    Height string `json:"Height"`
}

效果验证

修改后,序列化后的JSON会变成你期望的嵌套结构:

{"ID":"1","Type":"image","Name":"Image 1","Image":{"URL":"https://example.com/image1","Width":"100","Height":"100"},"Thumbnail":{"URL":"https://example.com/image1/thumb","Width":"50","Height":"50"}}

接收器反序列化后就能正确获取所有嵌套字段内容。

内容的提问来源于stack exchange,提问作者Атанас Чолаков

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:54:56