比如一本書有關的結構體
會有針對書整體,和針對書的每一個章節(jié)這樣的結構體诸老。
我們在章節(jié)里定義一個 book的指針,這樣就可以通過某本書的某個章節(jié)信息可以獲取到整本書相關的信息湿故,比較方便堕澄。
比如說有這樣一個需求,判斷這本書的章節(jié)數(shù)量是否大于1处硬,如果章節(jié)只有1章小槐,那么不在每章的標題中添加章節(jié)數(shù),也就是 “第一章”郁油,“第二章”這種本股。
我們定義一個方法設定每一章標題,Chapter結構體中不知道章節(jié)數(shù)桐腌,除非我們增加一個整本書的章節(jié)數(shù)字段拄显,這種方式如果我們還需要其他整本書有關的信息,還需要不斷添加字段案站,冗余就比較大躬审。
所以最好還是在Chapter中直接添加一個book指針字段,這樣就可以隨意訪問整本書相關的所有信息了蟆盐。
type Book struct {
Title string
Page int
ChapterList []*Chapter
}
type Chapter struct {
Title string
Page int
book *Book
}
此時如果你想把book保存為json文件承边,調(diào)用Json.Marshal方法的時候,它會對指針也進行展開石挂,這里的情況時book里展開有chapter的指針博助,chapter里展開有book的指針,就這樣不斷循環(huán)展開程序就不斷把內(nèi)存占滿痹愚,造成電腦卡死富岳。
有兩種方法可以讓json序列化忽略某個字段,避免這種指針循環(huán)展開卡死的情況
小寫的變量名是匿名變量拯腮,Json.Marshal不會進行解析
在字段的后面添加下面的json注釋 `json:"-"`