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": ""
}

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

相关推荐
源代码•宸2 天前
Leetcode—1929. 数组串联&&Q1. 数组串联【简单】
经验分享·后端·算法·leetcode·go
nil2 天前
记录protoc生成代码将optional改成omitepty问题
后端·go·protobuf
Way2top2 天前
Go语言动手写Web框架 - Gee第五天 中间件
后端·go
Way2top2 天前
Go语言动手写Web框架 - Gee第四天 分组控制
后端·go
Grassto2 天前
从 `go build` 开始:Go 第三方包加载流程源码导读
golang·go·go module
源代码•宸3 天前
Golang基础语法(go语言结构体、go语言数组与切片、go语言条件句、go语言循环)
开发语言·经验分享·后端·算法·golang·go
華勳全栈4 天前
两天开发完成智能体平台
java·spring·go
stark张宇5 天前
Go语言核心三剑客:数组、切片与结构体使用指南
后端·go
Aevget5 天前
智能高效Go开发工具GoLand v2025.3全新上线——新增资源泄漏分析
开发语言·ide·后端·golang·go
wwz165 天前
Dagor —— 一个高性能 DAG 算子执行框架,开箱即用!
go