July 18th, 2017
又好久没有更新博客了,最近因为项目需要学习了下Go语言,才真正明白了为什么说PHP是世界上最好的语言。言归正传,首先先推荐本秘籍 build-web-application-with-golangGithub上的高星项目,作者同时也是beego框架的开发者,本项目是作者使用Go进行Web开发的经验总结,满满的干货。
所以基础的JSON处理就直接参考文档吧,主要内容大概是Go中有专门的JSON包来处理JSON数据,通过定义对应的struct,tag映射字段,很方便的可以把JSON数据转成struct,或者把struct转化成JSON字符串。
其中文档中有段描述是这样的:
tag中如果带有”omitempty”选项,那么如果该字段值为空,就不会输出到JSON串中 这其实是一个比较常见的需求,当某个字段为空时,我们不希望该字段也输出在JSON字符串中,通过在结构体的tag中定义omitempty就可以达到该目的
但是在实际的应用过程中,我却遇到了如下问题:
type DataAttachment struct { Id string `json:"id,omitempty"` Head DataAttachmentHead `json:"head,omitempty"` Body DataAttachmentBody `json:"body,omitempty"` } type DataAttachmentHead struct { Text string `json:"text,omitempty"` Bgcolor string `json:"bgcolor,omitempty"` Tcolor string `json:"tcolor,omitempty"` } type DataAttachmentBody struct { Title string `json:"title,omitempty"` Image string `json:"image,omitempty"` Content string `json:"content,omitempty"` }以上DataAttachment这个结构,通过对head,body定义omitempty选项,我们预期是希望如果当head,body为空时,可以不输出这2个字段到JSON中。但是事实上却和我们预期的有所差异,我们通过json.Marshal得到的JSON中还是会有空的head和body。
所以我们要怎样才能实现我们的目的呢?其实很简单,传指针
type DataAttachment struct { Id string `json:"id,omitempty"` Head *DataAttachmentHead `json:"head,omitempty"` Body *DataAttachmentBody `json:"body,omitempty"` }参考
分享到 Twitter Facebook Google+
Kael Li, kael, kael li, lilinjian不乱于心,不困于情。不畏将来,不念过往。