gofly接口入参验证使用介绍

接口传入的参数做相关性质验证是开发中较为常用,gofly框架内置校验工具,提供开发效率,开发接口简单调用即可实现验证,下面介绍gofly框架数据验证设计思路及使用方法。

gofly框架提供了功能强大、使用便捷、灵活易扩展的数据/表单校验组件,由gvalid组件实现。gvalid组件实现了非常强大的数据校验功能,内置了数十种常用的校验规则,支持单数据多规则校验、多数据多规则批量校验、自定义错误信息、自定义正则校验、自定义校验规则注册、支持struct tag规则及提示信息绑定等等特性,是目前功能最强大的Go数据校验模块。

如果想增加或修改验证规则utils/tools/gvalid/internal目录下添加会修改。验证提示多语言数据在resource\locale目录下,例如中文(zh-CN)、英文(en-US)。多语言我们采用前后端同步方式,由前端决定语种,根据前端当前语言在请求时向接口提交当前设置语言参数,这样后端就可以和前端保持同一语言,前后端提示语言同步设置如下图前端:

1.检验规则示例:

Data()传入检验数据,Locale()传入检验提示语言。

Go 复制代码
//验证规则
	type BizReq struct {
		Account   string `v:"bail|required|length:6,16|same:QQ"`
		QQ        string
		Password  string `v:"required|same:Password2"`
		Password2 string `v:"required"`
	}
	var (
		req = BizReq{
			Account:   "gf",
			QQ:        "123456",
			Password:  "Gofly23",
			Password2: "gofly23",
		}
	)
	if err := gf.Validator().Data(req).Locale("en-US").Run(c); err != nil {
		fmt.Println("英文", err)
	}
	if err := gf.Validator().Data(req).Locale("zh-CN").Run(c); err != nil {
		fmt.Println("中文", err)
	}

2.接口中对前端传入参数验证并数据入库操作示例:

示例中是对的account验证为(1)必传,(2)长度为6到16之间,(3)传入值的qq参数值一样。password和password2必传并且两个值一致。

Go 复制代码
// 测试入参验证
func (api *Index) SaveVeriApi(c *gf.GinCtx) {
	//获取传参
	param, _ := gf.RequestParam(c)
	//验证规则
	rules := map[string]string{
		"account":   "bail|required|length:6,16|same:qq",
		"password":  "required|same:password2",
		"password2": "required",
	}
	if err := gf.Validator().Rules(rules).Data(param).Locale(c.Request.Header.Get("locale")).Run(c); err != nil {
		gf.Failed().SetMsg(err.String()).Regin(c)
		return
	}
	res, err := gf.Model("user").Data(param).Save()
	if err != nil {
		gf.Failed().SetMsg("错误").SetData(err).Regin(c)
	} else {
		gf.Success().SetMsg("添加成功").SetData(res).SetExdata(param).Regin(c)
	}
}
2.1传入参数:
javascript 复制代码
{
  account:gf,
  qq:123456,
  password:Gofly23,
  password2:gofly23,
  locale:cn,
}
2.2返回提示:
javascript 复制代码
{
    "code": 1,
    "data": false,
    "exdata": null,
    "message": "password字段值`Gofly23`必须和password2字段值`gofly23`相同; account字段值`gf`字段长度应当为6到16个字符",
    "time": 1708557872337,
    "token": ""
}

方法中校验规则:校验规则使用文档 了解更多。

相关推荐
一丝晨光7 小时前
数值溢出保护?数值溢出应该是多少?Swift如何让整数计算溢出不抛出异常?类型最大值和最小值?
java·javascript·c++·rust·go·c·swift
陌尘(MoCheeen)1 天前
技术书籍推荐(002)
java·javascript·c++·python·go
白泽来了3 天前
字节大模型应用开发框架 Eino 全解(一)|结合 RAG 知识库案例分析框架生态
开源·go·大模型应用开发
致于数据科学家的小陈4 天前
Go 层级菜单树转 json 处理
python·go·json·菜单树·菜单权限·children
白总Server5 天前
Golang领域Beego框架的中间件开发实战
服务器·网络·websocket·网络协议·udp·go·ssl
ん贤5 天前
GoWeb开发
开发语言·后端·tcp/ip·http·https·go·goweb
纪元A梦6 天前
华为OD机试真题——荒岛求生(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
java·c语言·javascript·c++·python·华为od·go
chxii8 天前
3.2goweb框架GORM
go
42fourtytoo9 天前
从0开始建立Github个人博客(hugo&PaperMod)
运维·服务器·python·go·github
xuhe210 天前
[tldr] GO语言异常处理
go·error