go gin 自定义验证

这篇具有很好参考价值的文章主要介绍了go gin 自定义验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们上一篇已经提到了gin中binding时候可以指定json字段大小等限制,但是那个错误却是英文的,现在想搞成中文的,以便前端可读,demo如下

package main

import (
	"net/http"
	"reflect"

	"github.com/gin-gonic/gin"
	"github.com/go-playground/validator/v10"
)

// binding 指明了json字段的限制,msg是自定义的错误提醒
type UserInfo struct {
	UserName  string `json:"username" binding:"required,min=4,max=6" msg:"username验证失败"`
	Age       int    `json:"age" binding:"gt=18,lte=120" msg:"age验证失败"`
	Password  string `json:"password" binding:"required" msg:"密码校验失败"`
	Password2 string `json:"password2" binding:"required,eqfield=Password" msg:"必填,切要与password一致"`
}

//any是泛型

func CoustomError(err error, obj any) map[string]string {
	var errors map[string]string = make(map[string]string)
	if err2, ok := err.(validator.ValidationErrors); ok {
		// 反射
		getObj := reflect.TypeOf(obj)
		// 循环错误的验证
		for _, v := range err2 {
			if sf, exist := getObj.Elem().FieldByName(v.Field()); exist {
				// 获取结构体中的msg属性
				errors[v.Field()] = sf.Tag.Get("msg")
			}
		}
		return errors
	}
	return nil
}

func validationcustomerror(c *gin.Context) {
	var user UserInfo
	err := c.ShouldBindJSON(&user)
	if err != nil {
		errors := CoustomError(err, &user)
		c.JSON(http.StatusBadRequest, gin.H{"msg": errors})
	} else {
		c.JSON(http.StatusOK, gin.H{"msg": user})
		return
	}
}

func main() {
	router := gin.Default()
	router.POST("/validationcustomerror", validationcustomerror)
	router.Run("localhost:8888")
}

go gin 自定义验证,GO,golang,gin,开发语言文章来源地址https://www.toymoban.com/news/detail-683314.html

到了这里,关于go gin 自定义验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go-gin-example 第二部分 jwt验证

    续接上部分 在前面几节中,我们已经基本的完成了 API’s 的编写,但是,还存在一些非常严重的问题,例如,我们现在的 API 是可以随意调用的,这显然还不安全全,在本文中我们通过 jwt-go (GoDoc) 的方式来简单解决这个问题。 jwt官网 认识JWT JSON Web Token ( JWT )是一个开放

    2024年01月17日
    浏览(28)
  • 【Golang】VsCode下开发Go语言的环境配置(超详细图文详解)

    📓推荐网站(不断完善中):个人博客 📌个人主页:个人主页 👉相关专栏:CSDN专栏、个人专栏 🏝立志赚钱,干活想躺,瞎分享的摸鱼工程师一枚 ​ 话说在前,Go语言的编码方式是 UTF-8 ,理论上你直接使用文本进行编辑也是可以的,当然为了提升我们的开发效率我们还是需

    2024年02月07日
    浏览(70)
  • Go学习第十五章——Gin参数绑定bind与验证器

    在Gin框架中, bind 用于绑定参数,即将请求参数绑定到结构体中。通过使用 bind ,我们可以方便地将请求参数与结构体字段进行绑定,从而更方便地处理和验证参数。 Gin框架提供了多种绑定方法,包括Query参数绑定、Form参数绑定、JSON参数绑定等。下面分别介绍这些方法的详

    2024年02月07日
    浏览(30)
  • go语言Gin框架常见面试题(1)

    Gin框架是一种基于Go语言的轻量级Web框架,具有高效、快速、易用等优点。Gin采用了类似于Expres

    2024年02月08日
    浏览(54)
  • Go语言Web框架Gin常见用法

    Gin是目前Go语言最为常用的Web框架,日常工作中也少不了使用此框架,编写此使用总结文档以备后用。 此文档参考官方文档编写,仅用于自我学习总结和参考。 我一直认为编写文档的意义一方面是给其他人提供了些许帮助,另一方面则是让自己加深了对知识的理解并为自己提

    2024年02月03日
    浏览(39)
  • Go语言工程实践之测试与Gin项目实践

    回归 测试 一般是QA(质量保证)同学 手动通过终端回归一些固定的主流程 场景 集成 测试 是对 系统功能维度做测试验证 ,通过服务暴露的某个接口,进行自动化测试 而 单元 测试 开发阶段,开发者 对单独的函数、模块做功能验证 层级从上至下, 测试成本逐渐减低 ,而测试 覆

    2024年02月13日
    浏览(35)
  • 基于go语言gin框架的web项目骨架

    节省时间与精力,更高效地打造稳定可靠的Web项目:基于Go语言和Gin框架的完善Web项目骨架。无需从零开始,直接利用这个骨架,快速搭建一个功能齐全、性能优异的Web应用。充分发挥Go语言和Gin框架的优势,轻松处理高并发、大流量的请求。构建可扩展性强、易于维护的代码

    2024年02月08日
    浏览(34)
  • Gin框架原生方式切割日志,Go语言原生日志切割

    目录 摘要 痛点 正文 1.分析 io.Writer 接口 2.实现 io.Writer 接口 3.将它作为原生输出 4.将它作为 Gin 框架的输出 自定义一个日志输出,将go语言和gin框架的日志自动按天拆分。本文通过实现io.Writer接口的方式,替换原生和gin框架的默认Writer,并植入了自定义的逻辑。该示例只讲述

    2024年02月09日
    浏览(33)
  • Go 语言之在 gin 框架中使用 zap 日志库

    gin.Default() 的源码 Logger(), Recovery() 实操 运行并访问:http://localhost:8080/hello test.log 其它参考:https://github.com/gin-contrib/zap

    2024年02月09日
    浏览(28)
  • 【Golang星辰图】加密和安全进阶:拓展Go的加密能力与身份验证

    在当今信息时代,保护用户数据和网络通信的安全至关重要。为了确保应用程序和用户之间的数据传输的机密性、完整性和真实性,加密和安全技术成为开发者必须掌握的关键领域之一。Go语言作为一种强大而灵活的编程语言,提供了丰富的加密和安全功能。本文将介绍一些

    2024年04月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包