首页>>后端>>Golang->Go 标签使用详解

Go 标签使用详解

时间:2023-12-01 本站 点击:0

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包中的编码与解码工具解析。

Tag 作用 "json_name" 将结构体的属性与json_name的对应(可以省略,与属性同名,且会在名字后面加 s) "-" 说明结构体的该属性不参与序列化 "json_name,omitempy" 如果为类型零值或空值,序列化时忽略该字段 "json_name,string[number|boolen]" 指定属性的类型,支持string、number、boolen
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       | 关系约束,例如:OnUpdateOnDelete                                  |

原文:https://juejin.cn/post/7100927678903451685


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Golang/5903.html