Go中常用字段说明

在go中使用Gin框架的时候,我们可以通过bindjson将请求体与结构体绑定。

常用字段说明:

1.required

用法:binding:"required" 说明:字段必须存在,不能为空。

Go 复制代码
Name string `json:"name" binding:"required"`

2.len

用法:binding:"len=xx" 说明:验证字符串、数组或切片的长度是否等于指定长度。

Go 复制代码
Code string `json:"code" binding:"len=6"` // 长度必须为 6

3.min和mix

用法:binding:"min=xx"binding:"max=xx"

说明:适用于数字和字符串;对于数字,限制最小或最大值;对于字符串,限制最小或最大字符数。

Go 复制代码
Age int `json:"age" binding:"min=1,max=100"`

4.gte和lte、gt和lt、ne

用法:binding:"gte=xx"binding:"lte=xx"

说明:gte 表示"greater than or equal"(大于等于),lte 表示"小于等于"。ne 表示不等于。常用于数字和时间。

Go 复制代码
Age int `json:"age" binding:"gte=18,lte=65"`

5.oneof

用法:binding:"gte=xx"binding:"lte=xx"

说明:gte 表示"greater than or equal"(大于等于),lte 表示"小于等于"。ne 表示不等于。常用于数字和时间。

Go 复制代码
Age int `json:"age" binding:"gte=18,lte=65"`

6.email

用法:binding:"email"

说明:验证字段是否是有效的电子邮件格式。

Go 复制代码
Email string `json:"email" binding:"required,email"`

7.url

用法:binding:"url"

说明:验证字段是否为有效的 URL。

Go 复制代码
Website string `json:"website" binding:"url"`

示例代码:

使用 BindJSON 并配合 binding 标签验证请求体数据的完整示例:

Go 复制代码
package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

type User struct {
    ID       string `json:"id" binding:"required"`
    Age      int    `json:"age" binding:"gte=0,lte=130"`
    Email    string `json:"email" binding:"required,email"`
    Password string `json:"password" binding:"min=8"`
}

func main() {
    router := gin.Default()

    router.POST("/user", func(c *gin.Context) {
        var user User

        if err := c.ShouldBindJSON(&user); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }

        // Process user data
        c.JSON(http.StatusOK, gin.H{"status": "User validated and processed"})
    })

    router.Run(":8080")
}

运行效果:

当发送带有错误字段的 JSON 请求时,会自动返回相应的错误信息,例如:

Go 复制代码
{
    "error": "Key: 'User.Email' Error:Field validation for 'Email' failed on the 'email' tag"
}

总结:

(1)使用 binding 标签定义验证规则,简洁且自动验证请求数据。

(2)ShouldBindJSON/BindJSON 可将错误自动绑定到结构体。

(3)若请求字段验证失败,Gin 会返回详细的错误消息。

相关推荐
uzong8 分钟前
企业智能助手的实践分享(LLM/RAG)
后端·程序员·架构
GetcharZp8 小时前
GitHub 49K+ Star!C++ 开发者必知的 JSON 神级库:从零到精通全指北
后端
xujinwei_gingko8 小时前
SpringBoot整合WebSocket
spring boot·后端·websocket
智码看视界9 小时前
现代Web开发基础:全栈工程师的起航点
前端·后端·c5全栈
程序员cxuan9 小时前
Claude Fable 5 来了
人工智能·后端·程序员
JS菌9 小时前
手写一个 AI Agent 全栈项目:从沙箱执行到子智能体的完整实现
前端·人工智能·后端
wang09079 小时前
自己动手写一个spring之IOC_2
java·后端·spring
ltl10 小时前
推理退化:为什么大模型会输出乱码、死循环和无意义文本
后端
ltl10 小时前
架构视图与文档:C4 模型从入门到实战
后端