在处理json格式字符串的时候,经常会看到声明struct结构的时候,属性的右侧还有反引号括起来的内容汽贸公司。形如:
type ur struct { urid int `json:"ur_id" bson:"ur_id"` urname string `json:"ur_name" bson:"ur_name"` }
要比较详细的了解这个,要先了解一下golan函数周期公式g的基础,在golang中,命名都是推荐都是用驼峰方式,并且在首字母大小写有特殊的语法含义:包外无法引用。但是阳光罐由经常需要和其它的系统进行数据交互,例如转成json格式,存储到mongodb啊等等。这个时候如果用属性名来作为键值可能不一定会符合项目要求。
所以呢就多了反引号的内容,在golang中叫标签(tag),在转换成其它数据格式的时候,会使用其中小王子特定的字段作为键值。例如上例在转成json格式:
u := &ur{urid: 1, urname: "tony"} j, _ := json.marshal(u) fmt.println(string(j))// 输出内容:// {"ur_id":1,"ur_name":"tony"}// 如果在属性中不增加标签说明,则输出:// {"urid":1,"urname":"tony"}// 可以看到直接用struct的属性名做键值。// ==其中还有一个bson的声明,这个是用在将数据存储到mongodb使用的==
那么当我们需要自己封装一些操作,需要用到tag中的内容时,咋样去获取呢?这边可以使用反射包(reflect)中的方法来获取:完整代码如下:
package mainimport ( "encoding/json" "fmt" "reflect")func main() { type ur struct { urid int `json:"ur_id" bson:"ur_id"` urname string `json:"ur_name" bson:"ur_name"` } // 输出json格式 u := &ur{urid: 1, urname: "tony"} j, _ := json.marshal(u) fmt.println(string(j)) // 输出内容:{"u我想对妈妈说的话r_id":1,"ur_name":"tony"} // 获取tag中的内容 t := reflect.typeof(u) field := t.elem().field(0) fmt.println(field.tag.get("json")) // 输出:ur_id fmt.println(field.tag.get("bson")) // 输出:ur_id}
type ur struct { urid int `json:"ur_id" bson:"ur_id" test:"test"` urname string `json:"ur_name" bson:"ur_name"`}
获取tag中test的值
// 获取tag中的内容typeof := reflect.typeof(u)field := typeof.elem().field(0)fmt.println(field.tag.get("json"))// 输出:ur_idfmt.println(field.tag.get("bson"))// 输出:ur_idfmt.println(field.tag.get("test"))// 输出:test
到此这篇关于go中json解析时tag的使用的文章就介绍到这了,更多相关go json tag 内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 15:35:21,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1590145b2a4bd837cdf183b4d3cd3c0b.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Go中JSON解析时tag的使用.doc
本文 PDF 下载地址:Go中JSON解析时tag的使用.pdf
留言与评论(共有 0 条评论) |