在 Go 的 struct 中,json 标签有不同的含义和用法,它是用于JSON序列化/反序列化(struct与JSON的转换)
| 标签写法 | 含义 |
|---|---|
json:"id" |
序列化为 "id",反序列化也从 "id" 解析 |
json:"-" |
完全忽略,不参与序列化和反序列化 |
json:"name,omitempty" |
序列化为 "name",空值(零值)时省略该字段 |
json:"title,omitempty" |
同上 |
json:"Title" |
序列化为 "Title",大小写敏感 |
binding 标签,绑定(Bind)是一个操作过程,不是struct标签,将HTTP请求数据(JSON/表单/XML等)自动解析到结构体
常见框架实现:
-
Gin :
c.ShouldBindJSON()、c.ShouldBindQuery()、c.ShouldBind() -
Echo :
c.Bind()
Go
// Gin中的绑定
type Request struct {
ID int `json:"id" form:"id"` // 同时支持JSON和表单
}
func handler(c *gin.Context) {
var req Request
// 自动根据Content-Type选择绑定方式
if err := c.ShouldBind(&req); err != nil {
// 处理错误
}
}
| binding 标签 | 含义 |
|---|---|
binding:"required" |
必填字段 |
binding:"omitempty" |
可以为空 |
binding:"min=5" |
最小长度/值(需配合 validator 使用) |
binding:"email" |
必须是邮箱格式 |
常见 form 标签,用于 HTTP 表单数据绑定(如查询参数、POST表单)
常见场景:
-
Gin框架中的
c.ShouldBindWith(&obj, binding.Form) -
处理
application/x-www-form-urlencoded数据
示例:
Go
type LoginForm struct {
Username string `form:"username"` // 对应表单中的username字段
Password string `form:"password"`
}
// Gin中使用:c.ShouldBind(&form)
| 标签写法 | 含义 |
|---|---|
form:"username" |
绑定表单字段名(通常与变量名一致) |
form:"user_name" |
绑定表单字段 user_name 到 UserName 变量 |
form:"-" |
忽略此字段 |
form:",omitempty" |
空值时忽略 |
form:"nick_name,bind_required" |
绑定并标记为必填 |