直接回答:结构体标签是写在反引号里的一组 key:"value" 键值对,通过反射读取;它只是字符串,写错字段名不会报错,只会静默失效,这是最常见的坑。

Tag 由反引号包含,由一对或几对的键值对组成,通过空格来分割键值。格式如下

1
`key01:"value01" key02:"value02" key03:"value03:XXX,Ondele:set null"`
1
2
3
4
5
type Person struct {
Name string `json:"name"`
Age int `json:"age,string"`
Addr string `json:"addr,omitempty"`
}

由于 Person 结构体里的 Addr 字段有 omitempty 属性,因此 encoding/json 在将对象转化 json 字符串时,只要发现对象里的 Addr 为 false, 0, 空指针,空接口,空数组,空切片,空映射,空字符串中的一种,就会被忽略。

结构体中Age字段有string,所以在转的时候会将int转为string

1
2
3
4
5
6
7
8
9
10
//可以选择的控制字段有三种:
// -:不要解析这个字段
// omitempty:当字段为空(默认值)时,不要解析这个字段。比如 false、0、nil、长度为 0 的 array,map,slice,string
// FieldName:当解析 json 的时候,使用这个名字
type StudentWithOption struct {
StudentId string //默认使用原定义中的值
StudentName string `json:"sname"` // 解析(encode/decode) 的时候,使用 `sname`,而不是 `Field`
StudentClass string `json:"class,omitempty"` // 解析的时候使用 `class`,如果struct 中这个值为空,就忽略它
StudentTeacher string `json:"-"` // 解析的时候忽略该字段。默认情况下会解析这个字段,因为它是大写字母开头的
}

gorm键约束

1
2
3
4
5
6
7
8
9
10
gorm定义	数据库字段约束
gorm:"primary_key" 字段设置为主键
gorm:"AUTO_INCREMENT" 字段设置为自增
gorm:"size:20 字段长度设置为20
gorm:"index:idx_user_id 字段设置普通索引,名称为idx_user_id
gorm:"not null 设置字段为非空
gorm:"type:varchar(64)" 设置字段为varchar类型,长度为64
gorm:"column:remark" 设置数据库字段名为remark
gorm:"-" 忽略此字段,不在表中创建该字段
gorm:"default:'默认'" 设置字段的默认值

这篇笔记整理自我自己的实践记录,如果做法有出入,或者你踩过别的坑,欢迎到留言板一起聊聊。

站内搜索

没有找到内容!