https://studygolang.com/articles/29740?fr=sidebar
go get github.com/go-playground/validator/v10
https://juejin.cn/post/6847902214279659533
package controller
import (
"fmt"
"github.com/gofiber/fiber"
uuid "github.com/satori/go.uuid"
"git.shining3d.com/cloud3d/gdocserver/common"
)
/*!
* 添加数据到cate
*/
func AddCate(c *fiber.Ctx) {
type AddParams struct {
IsDeleted string `json:"isDeleted" validate:"omitempty,oneof=n y"`
Name string `json:"name" validate:"required,max=255"`
CateType string `json:"cateType" validate:"required,oneof=group tag project"`
ParentId string `json:"parentId" validate:"omitempty,uuid"`
ProjectId string `json:"project_id,omitempty" validate:"required_with_all"` // 其他所有字段不为空且当前字段不为空 Field validate:"required_with_all=Field1 Field2"
}
var cs = &AddParams{}
/// 解析参数到结构体
if err := c.QueryParser(cs); err != nil {
common.Log.Error().AnErr("err", err).Msg("controller:AddCate")
c.JSON(fiber.Map{
"status": false,
"msg": fmt.Sprintf("%s", err),
})
return
}
err := common.Validate.Struct(cs) // 验证结构体参数 // common.Validate =validator.New()
if err != nil {
for _, err := range err.(validator.ValidationErrors) {
errFiled = err.Field() + " 错误"
fmt.Printf("%T=%v\n", err, err)
}
}
c.JSON(fiber.Map{
"status": false,
"msg": fmt.Sprintf("%s", err),
})
return
uid := uuid.NewV4().String() // 生成UUID
}
package main
import (
"fmt"
"reflect"
"strings"
"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"
)
// go get github.com/go-playground/validator/v10
// go get github.com/go-playground/locales
var validate *validator.Validate
var trans ut.Translator
func InitValidator() {
uni := ut.New(zh.New())
trans, _ = uni.GetTranslator("zh")
validate = validator.New()
validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
name := fld.Tag.Get("label")
return name
})
//验证器注册翻译器
err := zh_translations.RegisterDefaultTranslations(validate, trans)
if err != nil {
fmt.Println(err)
}
}
type Users struct {
Name string `form:"name" json:"name" validate:"required"`
Age uint8 `form:"age" json:"age" validate:"required,gt=18" label:"年龄"`
Passwd string `form:"passwd" json:"passwd" validate:"required,max=20,min=6"`
Code string `form:"code" json:"code" validate:"required,len=6"`
}
func main() {
// 初始化验证器
InitValidator()
users := &Users{
Name: "admin",
Age: 19,
Passwd: "123123",
Code: "123456",
}
errStr := ValidateStruct(users, false)
fmt.Println(errStr)
return
}
// ValidateStruct 验证结构体
func ValidateStruct(data interface{}, isAll bool) string {
err := validate.Struct(data)
strSli := make([]string, 0)
if err != nil {
for _, err := range err.(validator.ValidationErrors) {
// fmt.Println(err.Translate(trans)) //Age必须大于18
strSli = append(strSli, err.Translate(trans))
if !isAll {
break
}
}
}
return strings.Join(strSli, ",")
}