跳到主要内容

go-结构体

go中结构体是非常常用的类型,相当于js的对象

定义结构体​

  • struct 是 Go 里的结构体类型语法,用来把多个不同类型的字段组合成一个新的类型
  • 相当于把多个字段组合起来,定义一种新的复合数据结构类型
go
type User struct {
ID int
Username string
Email string
}

// 结构体类型初始化
user1 := User{}
user2 := User{ID:1,Username:"qqqiu"}

结构体标签​

  • 结构体标签: Struct Tag
  • 给结构体字段添加额外的描述信息(元数据)
  • 结构体标签不会改变字段本身的类型,而是告诉相关库如何处理这个字段
  • 一个字段可以同时定义多个标签
go

type Person struct {
Name string `json:"name"`
Age int `json:"age"`
City string `json:"city"`
}

场景​

  • 结构体标签最常见的用途:控制结构体与 JSON 之间的字段映射。
go
type StructName struct {
FieldName FieldType `key:"value"`
}
  • 绑定多个标签
go
// 绑定多个标签
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
uriURL 路径参数映射Gin
gorm数据库字段及约束映射GORM
validate字段校验规则go-playground/validator

json标签常用​

tag作用
json:"name"JSON 字段名用 name
json:"name,omitempty"空值时不输出该字段
json:"-"序列化/反序列化都忽略
json:",omitempty"保留字段名,只加 omitempty