0. Go的标签
Go标签在结构体中使用,在结构体编译阶段,可以通过反射被获取。
Go标签是用``符号引起来的一组key-value键值对,需要注意的是,value需要被“”括起来,另外,键值对之间要以空格间隔,如下格式:
struet demo { demo_val int `key1:"value1" key2:"value2" key3:"value3"`}
在Go中,标签有着方便json字符串以及常用框架解析的重要作用,下面,我们分门别类的梳理一下常用的标签,方便大家理解。
1. JSON标签
JSON字符串是我们常用的数据传输格式,由一组k-v键值对组成,很多时候,我们需要将接收到的JSON串与我们规定好的数据结构体绑定,方便直接调用,JSON标签能很便捷的完成这一工作,这些标签能被encoding/json包中的编码与解码工具解析。
type Student struct { ID int `json:"-"` // 该字段不进行序列化 Class int `json:"class"` // 该字段与class对应 Name string `json:"name,omitempy"` // 如果为类型零值或空值,序列化时忽略该字段 Age int `json:"age,string"` // 指定类型,支持string、number、boolen }
Gorm标签 Gorm框架负责ORM层与数据库表之间的映射,他的标签也是更加方便我们完成这一工作。
Gorm标签下的子标签大小写不敏感,子标签之间使用;分割,常用的单表Tag如下: | Tag | 作用 | | --- | --- | | "column" | 将结构体的属性与column的列对应,建议使用column_name的格式命名 | | "type" | 数据库中列的类型 | | "primaryKey" | 指定列为主键 | | "default" | 指定列为默认值|
常用的多表关联Tag如下: 标签选项 | 使用说明 | | ---------------- | -------------------------------------------------------------- | | foreignKey | 指定当前模型的列作为连接表的外键 例:gorm:"foreignKey:FieldId"
其中FieldID是外键字段名 | | references | 指定引用表的列名,其将被映射为连接表外键,例如"foreignKey:FieldId;references:FieldIdOther"
| | polymorphic | 指定多态类型,比如模型名 | | polymorphicValue | 指定多态值、默认表名 | | many2many | 指定连接表表名 | | joinForeignKey | 指定连接表的外键列名,其将被映射到当前表 | | joinReferences | 指定连接表的外键列名,其将被映射到引用表 | | constraint | 关系约束,例如:OnUpdate
、OnDelete
|