golang json 化中重写 unmarshaljson 后取不到值
在 golang 中使用 json 反序列化时重写结构体或嵌套结构体中的 unmarshaljson 方法,可能会导致取不到值。
问题原因:
当重写匿名嵌套结构体的 unmarshaljson 方法时,外部结构体也会继承该方法。在这种情况下,外部结构体在进行反序列化时将直接调用该重写的 unmarshaljson 方法,而忽略其成员变量的自定义反序列化逻辑。
立即学习“go语言免费学习笔记(深入)”;
解决方案:
示例:重写外部结构体的 unmarshaljson 方法
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 }
以上就是Golang JSON 化中重写 UnmarshalJSON 后为何取不到值?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号