Go语言开发中tag的使用

初学beego框架,常常为了设置输出tag而查资料,下面是我📱和整理tag设置:
针对JSON的输出,我们在定义struct tag的时候需要注意的几点是:
字段的tag是”-“,那么这个字段不会输出到JSON
tag中带有自定义名称,那么这个自定义名称会出现在JSON的字段名中,例如上面例子中serverName
tag中如果带有”omitempty”选项,那么如果该字段值为空,就不会输出到JSON串中
如果字段类型是bool, string, int, int64等,而tag中带有”,string”选项,那么这个字段在输出到JSON的时候会把该字段对应的值转换成JSON字符串

type Server struct {
    // ID 不会导出到JSON中
    ID int `json:"-"`
    // ServerName 的值会进行二次JSON编码
    ServerName  string `json:"serverName"`
   //含有都是json多个json输出用到的tag的时候
    ServerName2 string `json:"serverName2,string"`
    // 如果 ServerIP 为空,则不输出到JSON串中
    ServerIP   string `json:"serverIP,omitempty"`
}

在涉及到beego orm时候tag设置

type studentinfo struct {
    //设置主键且为自动增长(可以不设置,默认就是这样)
    Id          int    `pk:"auto"`
    //设置字段的长度
    Stuname     string `orm:"size(20)"`
    Stuidentify string `orm:"size(30)"`
    Stubirth    time.Time
    Stuclass    string `orm:"size(30)"`
    Stumajor    string `orm:"size(30)"`
}

type Userinfos struct {
    //设置主键自动增长的
    Id      int  `pk:"auto"`
    //设置字段的大小
    Name    string `orm:"size(30)"`
    // OneToOne 关系 同时含有json输出格式
    Profile *Profile `orm:"rel(one)"  json:"profile,omitempty`
    //Post    []*Post  `orm:"reverse(many)"` // 设置一对多的反向关系
}

type Profile struct {
    Id     int
    Age    int
    Email  string
    Gender string
    // 设置一对一反向关系(可选)
    User   *Userinfos `orm:"reverse(one)"` 
}

type Post struct {
    Id    int
    Title string
    //设置多对多关系
    Tags  []*Tag     `orm:"rel(m2m)"`
}

type Tag struct {
    Id    int
    Name  string
    //设置反向多对多关系
    Posts []*Post `orm:"reverse(many)"`
}

参考文档

struct成员变量的标签(tag)说明和获取方式

    原文作者:小歪子go
    原文地址: https://www.jianshu.com/p/fda7e26db62a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞