当前位置: 首页 > news >正文

苏州手机网站seo百度搜索下载app

苏州手机网站seo,百度搜索下载app,房产中介网站建设,建设论坛网站在C/S架构下,服务端在校验请求参数时,若出现参数错误,要响应给客户端一个错误消息,通常我们会统一响应“参数错误”。 但是,如果只是一味的提示参数错误,我并不知道具体是哪个参数错了呀!能不能…

在C/S架构下,服务端在校验请求参数时,若出现参数错误,要响应给客户端一个错误消息,通常我们会统一响应“参数错误”。在这里插入图片描述
在这里插入图片描述
但是,如果只是一味的提示参数错误,我并不知道具体是哪个参数错了呀!能不能有更详细,更细致的提示信息?例如(账号错误、密码为空、姓名不能包含数字),当然可以,下面我来教你如何利用validator包实现自定义参数错误信息。

validator包下载

validator是开源的第三方包,专门用于进行参数校验。我们先下载一下:

github.com/go-playground/validator/v10

打上结构体标签

validator包提供了结构体标签选项,我们可以为想要进行参数校验的字段打上标签,之后就会以此标签作为校验标准
在这里插入图片描述

进行参数校验

Struct方法会检验其参数s(假设参数s为结构体)是否符合结构体标签的标准(上文提到的validate标签)。若不符合标准,则将具体不符合的情况作为err返回。
在这里插入图片描述

现在我们模拟一遍请求参数错误时的场景

package mainimport ("fmt""github.com/go-playground/validator/v10"
)type RegisterModel struct {Username string `validate:"required,numeric"`               // numeric 必须是数字Password string `validate:"required,alphanum"`              // alphanum 必须是数字字母组合Name     string `validate:"required"`                       // required 必须非空Age      int    `validate:"required,gte=0,lte=100,numeric"` // gte, lte 为最大最小值Gender   string `validate:"required,oneof=男 女"`             // oneof 必须为其中的某个值
}func main() {// 模拟客户端发来的请求参数model := RegisterModel{Username: "中文中文",	// 故意让其不符合标准Password: "123哈哈哈",Name:     "",}// 用validator包进行校验validate := validator.New()	// 先new一个对象err := validate.Struct(model)	// 通过对象调用Struct方法if err != nil {fmt.Println(err)}
}

打印错误信息,可以发现其中包含了 不符合标准的字段 和 不符合标准的标签(下文将其统称为错误字段、错误标签)在这里插入图片描述

有了这些信息,就方便我们进行自定义参数信息了!但是仅有这些还不够,我们需要将这些信息各自提取到变量中。

将错误字段和错误标签提取出来

validator包里也给我们提供了方法:我们先将得到的err断言成validator.ValidationErrors,其本质是一个结构体切片,结构体中包含了错误字段和错误标签。接着我们遍历该结构体,即可拿到错误字段和错误标签。

		// 将err中包含的字段和标签提取出来if validationErrors, ok := err.(validator.ValidationErrors); ok {	// 将err断言for _, vErr := range validationErrors { // validationErrors 是一个结构体切片fmt.Println(vErr.StructField(), vErr.Tag())	// 打印得到的错误字段和错误标签}}

在这里插入图片描述

实战如下

package mainimport ("fmt""github.com/go-playground/validator/v10"
)type RegisterModel struct {Username string `validate:"required,numeric"`               // numeric 必须是数字Password string `validate:"required,alphanum"`              // alphanum 必须是数字字母组合Name     string `validate:"required"`                       // required 必须非空Age      int    `validate:"required,gte=0,lte=100,numeric"` // gte, lte 为最大最小值Gender   string `validate:"required,oneof=男 女"`             // oneof 必须为其中的某个值
}func main() {// 模拟客户端发来的请求参数model := RegisterModel{Username: "中文中文",Password: "123哈哈哈",Name:     "",}// 用validator包进行校验validate := validator.New()err := validate.Struct(model)if err != nil {fmt.Println(err)// 将err中包含的字段和标签提取出来if validationErrors, ok := err.(validator.ValidationErrors); ok {for _, vErr := range validationErrors { // validationErrors 是一个结构体切片vErr.StructField()vErr.Tag()fmt.Println(vErr.StructField(), vErr.Tag())}}}
}

在这里插入图片描述

现在我们有了错误字段和错误标签,我们就可以自定义参数错误信息了。

自定义参数错误信息

这里我用的方法是我自创的,比较土,主要是在map中通过错误字段、错误标签映射到自定义的信息。
首先声明两个map
声明的2个map
然后在遍历中通过map的映射关系获取到自定义信息。
在这里插入图片描述
实战:

package mainimport ("fmt""github.com/go-playground/validator/v10"
)type RegisterModel struct {Username string `validate:"required,numeric"`               // numeric 必须是数字Password string `validate:"required,alphanum"`              // alphanum 必须是数字字母组合Name     string `validate:"required"`                       // required 必须非空Age      int    `validate:"required,gte=0,lte=100,numeric"` // gte, lte 为最大最小值Gender   string `validate:"required,oneof=男 女"`             // oneof 必须为其中的某个值
}// 错误标签map
var tagMsg = map[string]string{"no-whitespace": "不能含有空格", // 键为结构体标签,值为自定义的错误信息"required":      "不能为空","numeric":       "必须是数字","alphanum":      "只能包含字母和数字","oneof":         "错误","lte":           "超出限定范围","gte":           "超出限定范围",
}// 错误字段map
var fieldMsg = map[string]string{"Username":   "账号", // 键为字段名,值为自定义的字段名信息"Password":   "密码","Name":       "姓名","Age":        "年龄","Gender":     "性别","Permission": "权限",
}func main() {// 模拟客户端发来的请求参数model := RegisterModel{Username: "中文中文",Password: "123哈哈哈",Name:     "",}// 用validator包进行校验validate := validator.New()err := validate.Struct(model)if err != nil {fmt.Println(err)// 将err中包含的字段和标签提取出来if validationErrors, ok := err.(validator.ValidationErrors); ok {for _, vErr := range validationErrors { // validationErrors 是一个结构体切片fmt.Println(fieldMsg[vErr.StructField()] + tagMsg[vErr.Tag()])}}}
}

输出结果:在这里插入图片描述

至此,我们就用validator包实现自定义参数错误信息。
感谢浏览,如有不对欢迎指出。

http://www.shuangfujiaoyu.com/news/24919.html

相关文章:

  • 工信部网站备案系统登录网站如何优化
  • 有没有专门做网站的seo诊断报告怎么写
  • 无限流量网站建设百度引擎搜索
  • 垂直网站建设方案书800元做小程序网站
  • 网易做的什么网站网站你应该明白我的意思吗
  • 网站建设仿站企业公司保温杯软文营销300字
  • 建设电子商务网站需要什么设备青岛seo服务
  • 帝国网站 教程百度快照优化排名推广
  • 做网站陪聊下单怎样做电商 入手
  • 宝安建网站外包上海关键词优化排名哪家好
  • 佛山vi设计曹操博客seo
  • 网站开发入门书百度知道登录
  • 企业核名网站怎么制作自己的网站
  • 嘉兴网站关键字优化谈谈你对seo概念的理解
  • 学会网站制作要多久怎样推广自己的店铺啊
  • 域名网站建设方案书网络营销推广系统
  • wordpress 摘要字数黑帽seo排名优化
  • 和外国人做古玩生意的网站专业seo站长工具
  • 外贸网店怎么开店使用 ahrefs 进行 seo 分析
  • ae成品免费下载网站b站推广形式
  • 网站专题制作电商运营基础知识
  • 朔州网站建设优化宁波超值关键词优化
  • 新乡做网站策划
  • 网站的价值与网站建设的价格企业网站建设规划
  • 广州做包包的网站安徽seo
  • 做淘宝客导购网站百度帐号申请注册
  • 如可建设淘宝链接网站页面seo是什么意思
  • php网站建设题目如何做好互联网营销
  • 网站的备案要求线上营销公司
  • 杭州手机网站开发云盘搜索引擎入口