golang json忽略解析字段的两个方法 (golang json 序列化含有父节点指针的结构体时电脑跑满内存卡死)

mudssky · · 1704 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

比如一本书有关的结构体

会有针对书整体,和针对书的每一个章节这样的结构体。

我们在章节里定义一个 book的指针,这样就可以通过某本书的某个章节信息可以获取到整本书相关的信息,比较方便。

比如说有这样一个需求,判断这本书的章节数量是否大于1,如果章节只有1章,那么不在每章的标题中添加章节数,也就是 “第一章”,“第二章”这种。

我们定义一个方法设定每一章标题,Chapter结构体中不知道章节数,除非我们增加一个整本书的章节数字段,这种方式如果我们还需要其他整本书有关的信息,还需要不断添加字段,冗余就比较大。

所以最好还是在Chapter中直接添加一个book指针字段,这样就可以随意访问整本书相关的所有信息了。

type Book struct {
    Title       string
    Page        int
    ChapterList []*Chapter
}
type Chapter struct {
    Title string
    Page  int
    book  *Book
}

此时如果你想把book保存为json文件,调用Json.Marshal方法的时候,它会对指针也进行展开,这里的情况时book里展开有chapter的指针,chapter里展开有book的指针,就这样不断循环展开程序就不断把内存占满,造成电脑卡死。

有两种方法可以让json序列化忽略某个字段,避免这种指针循环展开卡死的情况

  1. 小写的变量名是匿名变量,Json.Marshal不会进行解析

  2. 在字段的后面添加下面的json注释
    `json:"-"`
    
    
    

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1704 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传