通过拦截 Unmarshal 调用来防止 UnmarshalJSON 中的堆栈溢出
在自定义 UnmarshalJSON 实现的上下文中,可能需要执行其他步骤在数据结构初始化期间。但是,在 UnmarshalJSON 中调用 json.Unmarshal() 可能会导致堆栈溢出,因为 JSON 解码器会重复搜索自定义实现,从而导致无限递归。
为了避免此问题,可以调用底层默认实现而不触发递归循环。操作方法如下:
使用 Type 关键字创建中间类型:
类型转换与赋值:
调用默认解组函数:
后处理(可选):
通过采用此技术,递归循环被破坏,因为新类型没有定义 UnmarshalJSON 方法。这可以防止堆栈溢出并允许通过附加处理进行无缝初始化。
以上是如何防止 Go 的 UnmarshalJSON 中的堆栈溢出?的详细内容。更多信息请关注PHP中文网其他相关文章!