初学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)"`
}