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

相关推荐
小信丶2 小时前
@EnableMethodCache 注解详解:原理、应用场景与示例代码
java·spring boot·后端·spring
小二·2 小时前
Go 语言系统编程与云原生开发实战(第8篇)消息队列实战:Kafka 事件驱动 × CQRS 架构 × 最终一致性(生产级落地)
云原生·golang·kafka
qq_2975746710 小时前
【实战教程】SpringBoot 集成阿里云短信服务实现验证码发送
spring boot·后端·阿里云
韩立学长12 小时前
【开题答辩实录分享】以《智能大学宿舍管理系统的设计与实现》为例进行选题答辩实录分享
数据库·spring boot·后端
编码者卢布14 小时前
【Azure Storage Account】Azure Table Storage 跨区批量迁移方案
后端·python·flask
NBhhbYyOljP16 小时前
LabVIEW与西门子PLC S7200SMART 12001500 300 400
golang
她说..17 小时前
策略模式+工厂模式实现审批流(面试问答版)
java·后端·spring·面试·springboot·策略模式·javaee
梦梦代码精17 小时前
开源、免费、可商用:BuildingAI一站式体验报告
开发语言·前端·数据结构·人工智能·后端·开源·知识图谱
李慕婉学姐18 小时前
【开题答辩过程】以《基于Spring Boot的疗养院理疗管理系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·后端