初學(xué)beego框架醇锚,常常為了設(shè)置輸出tag而查資料焊唬,下面是我??和整理tag設(shè)置:
針對(duì)JSON的輸出求晶,我們?cè)诙xstruct tag的時(shí)候需要注意的幾點(diǎn)是:
字段的tag是"-"芳杏,那么這個(gè)字段不會(huì)輸出到JSON
tag中帶有自定義名稱(chēng)辟宗,那么這個(gè)自定義名稱(chēng)會(huì)出現(xiàn)在JSON的字段名中泊脐,例如上面例子中serverName
tag中如果帶有"omitempty"選項(xiàng)容客,那么如果該字段值為空溯职,就不會(huì)輸出到JSON串中
如果字段類(lèi)型是bool, string, int, int64等吞获,而tag中帶有",string"選項(xiàng),那么這個(gè)字段在輸出到JSON的時(shí)候會(huì)把該字段對(duì)應(yīng)的值轉(zhuǎn)換成JSON字符串
type Server struct {
// ID 不會(huì)導(dǎo)出到JSON中
ID int `json:"-"`
// ServerName 的值會(huì)進(jìn)行二次JSON編碼
ServerName string `json:"serverName"`
//含有都是json多個(gè)json輸出用到的tag的時(shí)候
ServerName2 string `json:"serverName2,string"`
// 如果 ServerIP 為空紧阔,則不輸出到JSON串中
ServerIP string `json:"serverIP,omitempty"`
}
在涉及到beego orm時(shí)候tag設(shè)置
type studentinfo struct {
//設(shè)置主鍵且為自動(dòng)增長(zhǎng)(可以不設(shè)置擅耽,默認(rèn)就是這樣)
Id int `pk:"auto"`
//設(shè)置字段的長(zhǎng)度
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 {
//設(shè)置主鍵自動(dòng)增長(zhǎng)的
Id int `pk:"auto"`
//設(shè)置字段的大小
Name string `orm:"size(30)"`
// OneToOne 關(guān)系 同時(shí)含有json輸出格式
Profile *Profile `orm:"rel(one)" json:"profile,omitempty`
//Post []*Post `orm:"reverse(many)"` // 設(shè)置一對(duì)多的反向關(guān)系
}
type Profile struct {
Id int
Age int
Email string
Gender string
// 設(shè)置一對(duì)一反向關(guān)系(可選)
User *Userinfos `orm:"reverse(one)"`
}
type Post struct {
Id int
Title string
//設(shè)置多對(duì)多關(guān)系
Tags []*Tag `orm:"rel(m2m)"`
}
type Tag struct {
Id int
Name string
//設(shè)置反向多對(duì)多關(guān)系
Posts []*Post `orm:"reverse(many)"`
}