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 会返回详细的错误消息。

相关推荐
星辰_mya8 分钟前
深度全面学习负载均衡Ribbon/Spring Cloud LoadBalancer
后端·spring cloud·面试·负载均衡·架构师
小江的记录本17 分钟前
【JEECG Boot】 JEECG Boot 数据字典管理——六大核心功能(内含:《JEECG Boot 数据字典开发速查清单》)
java·前端·数据库·spring boot·后端·spring·mybatis
小江的记录本17 分钟前
【JEECG Boot】 JEECG Boot——Online表单 系统性知识体系全解
java·前端·spring boot·后端·spring·低代码·mybatis
WangJunXiang623 分钟前
初识Flask框架
后端·python·flask
希望永不加班26 分钟前
SpringBoot 邮件发送:文本邮件与 HTML 邮件
java·spring boot·后端·spring·html
ん贤35 分钟前
Go 并发高频十问:goroutine 与线程的区别是什么?select 底层原理是什么?
开发语言·golang·并发
devlei8 小时前
从源码泄露看AI Agent未来:深度对比Claude Code原生实现与OpenClaw开源方案
android·前端·后端
努力的小郑10 小时前
Canal 不难,难的是用好:从接入到治理
后端·mysql·性能优化
Victor35610 小时前
MongoDB(87)如何使用GridFS?
后端
Victor35610 小时前
MongoDB(88)如何进行数据迁移?
后端