golang结构体的标签使用总结

golang标签介绍
在 Go 语言中,结构体字段可以使用标签(Tag)来附加元数据。标签是包含在字段声明的后方,由一对反引号 括起来的字符串,例如:json:“name”`。在使用标签时,需要使用反射的相关函数来解析和使用标签的值。标签和反射一起使用,为我们提供了在运行时动态处理结构体字段的能力,例如通过标签解析结构体,并根据标签的值进行字段映射、表单验证、JSON 或数据库的序列化与反序列化等操作。

1. url

urlkey:"value"keyvalueurl
url:"name"url:"omitempty"url:"-"url:"omitempty, name"
url
type User struct {
    Name     string `url:"name"`
    Age      int    `url:"age"`
    IsActive bool   `url:"active,omitempty"`
}
encoding/urlurl
func(c *Context)ShouldBindQuery(obj any) error

2. binding

binding

常用的标签名有以下几个:

requiredminmaxeqnegtgteltlteeqfieldnefieldemailurldatetimelendefaultomitemptyoneofcontainsexcludesstartswithendswithpatterndatetime

还有数组和网络验证等,不一一列举

可使用自定义验证的错误信息:
如:

type UserInfo struct{
	UserName string   `json:"username" binding:"required" msg"用户名不能	为空"`
	PassWord string `json:"password" binding:"min=3,max=6" msg"密码长度不能小于3大于6"`
	Email    string `json:"email" binding:"email" msg"邮箱地址格式不正确"`
}
// 示例:
type User struct {
    ID        int    `binding:"required"`
    Name      string `binding:"required,min=2,max=50"`
    Age       int    `binding:"required,min=0,max=150"`
    Email     string `binding:"required,email"`
    Password  string `binding:"required,min=8"`
    Address   string `binding:"omitempty"`
}

3.json

 json
  1. 字段名称:可以使用 json:“fieldname” 来指定字段在 JSON 中的名称。例如:
type User struct {
    UserName string `json:"name"`
}

在上面的示例中,字段 UserName 在 JSON 中将表示为 “name”。

  1. 空值处理:通过在标签中使用 omitempty,可以在进行 JSON 序列化时忽略空值字段。例如:
type User struct {
    UserName string `json:"name,omitempty"`
    Age      int    `json:"age,omitempty"`
}

在上面的示例中,如果 UserName 或 Age 字段的值为空,则在序列化时将被忽略。

  1. 忽略字段:通过在标签中使用 “-”,可以完全忽略该字段进行 JSON 序列化和反序列化。
type User struct {
    UserName string `json:"-"`
    Password string `json:"-"`
}

在上面的示例中,字段 UserName 和 Password 将完全被忽略。

  1. 嵌套结构体:可以在结构体中嵌套其他结构体,并使用标签指定嵌套结构体的名称和选项。
type User struct {
    Name  string `json:"name"`
    Email string `json:"email"`
}
type Post struct {
    Title   string `json:"title"`
    Content string `json:"content"`
    Author  User   `json:"author"`
}

在上面的示例中,Post 结构体中的 Author 字段将在 JSON 中表示为 “author”,内部的 Name 和 Email 字段保持不变。

  1. json序列化和反序列化

注:结构体字段需要大写

json.MarshalJSON []byte json.UnmarshalJSON []byte json.Unmarshal

4. yaml

5.gorm

6. protobuf

7. db

8. protobuf