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

相关推荐
宇明一不急10 小时前
go 链表 (标准库实现)
开发语言·链表·golang
Maiko Star10 小时前
* SpringBoot整合LangChain4j
java·spring boot·后端·langchain4j
明月_清风11 小时前
Go语言空接口与类型断言完全指南:从"万能容器"到"类型还原"
后端·go
每天进步一点_JL11 小时前
Spring Boot 缓存体系
后端
百珏11 小时前
[灰度发布]:全链路透传组件:APM、自研方案与 Java Agent 的实现取舍
后端·设计模式·架构
正在走向自律11 小时前
DISTINCT 去重查询为什么这么慢?聊聊我能理解的几种优化思路
后端
OpsEye11 小时前
数据库连接池爆了,这3个命令能救你一次
运维·数据库·后端
绝知此事11 小时前
【产品更名】通义灵码升级为 Qoder CN:AI 编码助手新时代,附大模型收费与 Spring Boot 支持全对比
人工智能·spring boot·后端·idea·ai编程
~|Bernard|11 小时前
GO语言中哪些类型是可比较类型的(==和!=)
开发语言·后端·golang
用户67570498850212 小时前
Celery 太重了?这可能是你一直在找的 asyncio 任务队列
后端·python·消息队列