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 小时前
洛谷题单入门1 顺序结构
数据结构·算法·golang
前端一小卒2 小时前
我用 Claude Code 的 Superpowers 技能链写了个服务,部署前差点把服务器搞炸
前端·javascript·后端
曹牧3 小时前
Spring:@RequestMapping注解,匹配的顺序与上下文无关
java·后端·spring
阿丰资源5 小时前
SpringBoot+Vue实战:打造企业级在线文档管理系统
vue.js·spring boot·后端
Rust研习社5 小时前
使用 Axum 构建高性能异步 Web 服务
开发语言·前端·网络·后端·http·rust
0xDevNull5 小时前
Spring Boot 自动装配:从原理到实践
java·spring boot·后端
IT_陈寒6 小时前
SpringBoot配置加载顺序把我坑惨了
前端·人工智能·后端
Moment6 小时前
面试官:给 llm 传递上下文,有哪几个身份 role ❓❓❓
前端·后端·面试
snakeshe10106 小时前
SpringBoot 多人协作平台实战(5):从零开始集成 MyBatis ORM 连接 MySQL 数据库
后端
SamDeepThinking6 小时前
中小团队需要一个资源微服务
后端·微服务·架构