一款好用的go请求参数验证库

2024/04/18 go

永远不要相信用户的输入的值,这些输入的参数值如果不验证它,否则会带来可怕的后果:可能P0事故,可能提桶跑路,可能丢失饭碗,可能南方的阳光照着北方的风,~~~跑题了。

pkpVBTJ.jpg

一、 背景

正常来说我们写接口的时候,客户端传递过来的表单数据,我们都必须要校验的,所以我们的业务代码里会有很多的if else 来验证参数。可能真正处理业务的代码没几行,if else 却占据了一大半!真是西红柿炒鸡蛋-》操蛋🥚。那么有没有一款好用的验证请求参数的库,配置一下就能验证客户端安传递过来的参数呢?有的我推荐一个用 GO 开发的验证请求参数的库:是它是它就是它,它的名字叫validator

二、安装

go get -u github.com/go-playground/validator/v10

三、使用

package main

import (
	"fmt"
	"github.com/go-playground/validator/v10"
)

type User struct {
	UserName string `json:"user_name" validate:"required"`
	Password string `json:"password" validate:"required,min=6,max=20"`
}
func main() {
	example := User{
		Password: "666666",
	}
 
	//实例化验证器
	validate  := validator.New() 

	errs := validate.Struct(example)
	if errs != nil {
		for _, err := range errs.(validator.ValidationErrors) {
			fmt.Println("错误:",err)
		}
	}

}

运行上面代码,然后输出

错误 Key: ‘User.UserName’ Error:Field validation for ‘UserName’ failed on the ‘required’ tag


你会发现提示是英文的,那对我这种英语过八级的人来说不是很友好,fuck! 不过不要紧,如果需要翻译成中文则还需安装验证提示翻译包:

go get -u github.com/go-playground/locales
go get -u github.com/go-playground/universal-translator

开始使用它:

package main

import (
	"fmt"
	"github.com/go-playground/locales/zh"
	ut "github.com/go-playground/universal-translator"
	"github.com/go-playground/validator/v10"
	zh_translations "github.com/go-playground/validator/v10/translations/zh"
)

type User struct {
	UserName string `json:"user_name" validate:"required"`
	Password string `json:"password" validate:"required,min=6,max=20"`
}
func main() {
	example := User{
		Password: "123",
	}
	// 中文翻译器
	uni := ut.New(zh.New())
	trans, _ := uni.GetTranslator("zh")

	//实例化验证器
	validate  := validator.New()
	// 注册翻译器到校验器
	err := zh_translations.RegisterDefaultTranslations(validate, trans)
	if err!=nil {
		fmt.Println(err)
		return
	}

	errs := validate.Struct(example)
	if errs != nil {
		for _, err := range errs.(validator.ValidationErrors) {
			fmt.Println(err.Translate(trans))
		}
	}

}

运行代码输出:
UserName为必填字段 Password长度必须至少为6个字符

怎么样,还是可以的哈哈哈哈哈哈 参数处理验证完之后,后面就可以安心的处理业务逻辑了

四、参考文档

validator

Search

    Table of Contents