go-结构体
go中结构体是非常常用的类型,相当于js的对象
定义结构体
struct是 Go 里的结构体类型语法,用来把多个不同类型的字段组合成一个新的类型- 相当于把多个字段组合起来,定义一种新的复合数据结构类型
type User struct {
ID int
Username string
Email string
}
// 结构体类型初始化
user1 := User{}
user2 := User{ID:1,Username:"qqqiu"}
结构体标签
- 结构体标签: Struct Tag
- 给结构体字段添加额外的描述信息(元数据)
- 结构体标签不会改变字段本身的类型,而是告诉相关库如何处理这个字段
- 一个字段可以同时定义多个标签
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
City string `json:"city"`
}
场景
- 结构体标签最常见的用途:控制结构体与 JSON 之间的字段映射。
type StructName struct {
FieldName FieldType `key:"value"`
}
- 绑定多个标签
// 绑定多个标签
type User struct {
Name string `json:"name" binding:"required" gorm:"column:user_name"`
}
常见标签
json是 Go 标准库支持的标签,binding、gorm等是对应第三方库识别的标签,并不是 Go 语言内置的特殊关键字
| 标签 | 作用 | 常见使用场景 |
|---|---|---|
json | 控制 JSON 字段名称及序列化行为 | API 请求和响应 |
binding | 参数绑定和校验 | Gin |
form | 表单、查询参数映射 | Gin |
uri | URL 路径参数映射 | Gin |
gorm | 数据库字段及约束映射 | GORM |
validate | 字段校验规则 | go-playground/validator |
json标签常用
| tag | 作用 |
|---|---|
json:"name" | JSON 字段名用 name |
json:"name,omitempty" | 空值时不输出该字段 |
json:"-" | 序列化/反序列化都忽略 |
json:",omitempty" | 保留字段名,只加 omitempty |