GO语言之tag

先写个小demo:

package main 
import(
	."fmt"
	"encoding/json"
)
type User struct {
    UserId   int    `json:"user_id" bson:"user_id"`
    UserName string `json:"user_name" bson:"user_name"`
}
func main()  {
	u := &User{UserId: 1, UserName: "tony"}
	j, _ := json.Marshal(u)
	Println(string(j))
	Println("-----------")
	Println(u)
}

运行结果为:

PS E:\Desktop\我的算法\go语言\demo> go run demo.go
{"user_id":1,"user_name":"tony"}
-----------
&{1 tony}

下面是我?和整理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)"`
}

点击这儿--->GO官方tag

猜你喜欢

转载自blog.csdn.net/qq_40417296/article/details/83796431