JSON、bind、form

在 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等)自动解析到结构体

常见框架实现:

  • Ginc.ShouldBindJSON()c.ShouldBindQuery()c.ShouldBind()

  • Echoc.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_nameUserName 变量
form:"-" 忽略此字段
form:",omitempty" 空值时忽略
form:"nick_name,bind_required" 绑定并标记为必填
相关推荐
‎ദ്ദിᵔ.˛.ᵔ₎1 天前
LIST 的相关知识
数据结构·list
M--Y1 天前
Redis常用数据类型
数据结构·数据库·redis
Java成神之路-1 天前
SpringMVC 响应实战指南:页面、文本、JSON 返回全流程(Spring系列13)
java·spring·json
༾冬瓜大侠༿1 天前
vector
c语言·开发语言·数据结构·c++·算法
汀、人工智能1 天前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
liu****1 天前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
汀、人工智能1 天前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能1 天前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
CoderCodingNo1 天前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
汀、人工智能1 天前
[特殊字符] 第76课:单词拆分
数据结构·算法·均值算法·前缀树·trie·单词拆分