程序开发 · 2025年1月28日

Go 中重写 UnmarshalJSON 后取不到值的原因与解决办法是什么?

在GOLANG实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天GOLANG就整理分享《Go 中重写 UnmarshalJSON 后取不到值的原因与解决办法是什么?》,聊聊,希望可以帮助到正在努力赚钱的你。,
,
重写 unmarshaljson 后取不到值的原因与解决办法,在 go 中,嵌套的结构体的接口会被外层结构体继承。故在代码中,对 idarr 结构体重写 unmarshaljson 方法后,a 结构体也继承了该方法。,问题在于重写的 unmarshaljson 方法只处理了 idarr 结构体,导致 more 字段无法解析。,解决办法有以下几种:,以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持GOLANG!更多关于GOLANG的相关知识,也可关注GOLANG公众号。,重写 unmarshaljson 后取不到值的原因与解决办法,在GOLANG实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天GOLANG就整理分享《Go 中重写 UnmarshalJSON 后取不到值的原因与解决办法是什么?》,聊聊,希望可以帮助到正在努力赚钱的你。,

当前位置: > > > > Go 中重写 UnmarshalJSON 后取不到值的原因与解决办法是什么?

Go 中重写 UnmarshalJSON 后取不到值的原因与解决办法是什么?

2024-11-03 21:24:49
0浏览
收藏

在GOLANG实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天GOLANG就整理分享《Go 中重写 UnmarshalJSON 后取不到值的原因与解决办法是什么?》,聊聊,希望可以帮助到正在努力赚钱的你。

重写 unmarshaljson 后取不到值的原因与解决办法

在 go 中,嵌套的结构体的接口会被外层结构体继承。故在代码中,对 idarr 结构体重写 unmarshaljson 方法后,a 结构体也继承了该方法。

问题在于重写的 unmarshaljson 方法只处理了 idarr 结构体,导致 more 字段无法解析。

解决办法有以下几种:

  1. 最小粒度重写方法: 只重写 idarr 结构体中需要处理的部分,保持 unmarshaljson 方法的最小粒度。
  2. 重写 a 的 unmarshaljson 方法: 直接在 a 结构体中重写 unmarshaljson 方法,处理 ids 和 more 字段。
func (s *a) unmarshaljson(data []byte) error {
    t := struct {
        ids []string `json:"ids"`
        more string `json:"more"`
    }{}

    if err := json.unmarshal(data, &t); err != nil {
        return err
    }
    for _, id := range t.ids {
        uid, err := strconv.parseint(id, 10, 64)
        if err != nil {
            return err
        }
        s.ids = append(s.ids, uint64(uid))
    }
    s.more = t.more
    return nil
}
  1. 修改结构体定义: 去除匿名嵌套,将 idarr 和 a 作为一个独立的结构体。这样就不会出现继承问题。
type B struct {
    Ids []uint64
}

type A struct {
    B
    More string `json:"more"`
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持GOLANG!更多关于GOLANG的相关知识,也可关注GOLANG公众号。

SQL 中如何忽略更新操作中的唯一键冲突?
反应疲劳:为什么一些开发人员正在继续前进