重写 unmarshaljson 后取不到值的原因与解决办法
在 go 中,嵌套的结构体的接口会被外层结构体继承。故在代码中,对 idarr 结构体重写 unmarshaljson 方法后,a 结构体也继承了该方法。
问题在于重写的 unmarshaljson 方法只处理了 idarr 结构体,导致 more 字段无法解析。
解决办法有以下几种:
- 最小粒度重写方法: 只重写 idarr 结构体中需要处理的部分,保持 unmarshaljson 方法的最小粒度。
- 重写 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 }
登录后复制
- 修改结构体定义: 去除匿名嵌套,将 idarr 和 a 作为一个独立的结构体。这样就不会出现继承问题。
type B struct { Ids []uint64 } type A struct { B More string `json:"more"` }
登录后复制
以上就是Go 中重写 UnmarshalJSON 后取不到值的原因与解决办法是什么?的详细内容,更多请关注抖狐科技其它相关文章!
-
一文详细了解为什么ETH仍然可以达到4.7K美元
由于看跌市场情绪持续存在,以太坊在24小时内下跌了5.41%。一位分析师开始关注4723美元的新ATH。 在过去的一个月里,以太坊[ETH]经历了强劲的下降趋势。尽管更广泛的加密货币市场出现了大幅波动...
-
黑神话悟空灵台药苗如何获取 灵台药苗获取方法
在《黑神话:悟空》中,灵台药苗的获取是一段充满挑战的探险之旅。第五章带你进入火焰山,在那里荒芜与炽热交织。跟随php小编子墨,踏入这段焰火试炼,领略灵台药苗的传奇。黑神话悟空灵台药苗怎么获得1、首先传...
-
python网络爬虫怎么写
网络爬虫是一种自动下载和提取互联网信息的计算机程序。编写 python 网络爬虫需遵循以下步骤:选择框架(例如 scrapy、beautifulsoup、requests)分析目标网站构建请求解析响应...
-
《潮汐守望者》怒嗥之枪埃普萨装备词条搭配推荐
《潮汐守望者》中的怒吼之枪埃普萨,作为一名全能的远程战士,拥有强大的技能和较远的攻击范围。但是,如何为埃普萨搭配装备词条才能发挥其最大实力呢?php小编百草将在此篇文章中详细解析埃普萨的装备词条搭配技...
-
如何使用 JavaScript 实现 History 路由,解决页面公共代码冗余问题?
如何利用 javascript 实现 history 路由? 为了应对拥有众多菜单,且每个菜单对应一个页面、公共代码需要不断复制的问题,我们可以利用 javascript 技术实现 history 路...