前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在golang中进行数据模型的校验

在golang中进行数据模型的校验

原创
作者头像
jerryteng
发布2021-09-06 18:05:27
1.3K0
发布2021-09-06 18:05:27
举报
文章被收录于专栏:jerryteng的专栏jerryteng的专栏

我们在处理我们的业务逻辑的时候,

一般前端传过来的信息,后端代码一定是抱着 所有信息都不信任的态度,

所有的输入信息我们都需要进行校验,

我们在代码实践的过程中,用的xml写的idl进行数据的校验,校验的工具采用的是 go-playground的validator

什么是validator呢?

在web应用中经常会遇到数据验证问题,普通的验证方法比较繁琐,这里介绍一个使用比较多的包validator

It has the following unique features:

  • Cross Field and Cross Struct validations by using validation tags or custom validators.
  • Slice, Array and Map diving, which allows any or all levels of a multidimensional field to be validated.
  • Ability to dive into both map keys and values for validation
  • Handles type interface by determining it's underlying type prior to validation.
  • Handles custom field types such as sql driver Valuer see Valuer

。。。

这里不详细的展开,

下面来一个使用示例:

package main

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

type Users struct {
    Phone   string `form:"phone" json:"phone" validate:"required"`
    Passwd   string `form:"passwd" json:"passwd" validate:"required,max=20,min=6"`
}

func main() {

    users := &Users{
        Phone:      "1326654487",
        Passwd:       "123",
    }
    validate := validator.New()
    err := validate.Struct(users)
    if err != nil {
        for _, err := range err.(validator.ValidationErrors) {
            fmt.Println(err)//Key: 'Users.Passwd' Error:Field validation for 'Passwd' failed on the 'min' tag
            return
        }
    }
    return
}

使用起来也比较简单。

今天也遇到了一个字符编码的问题,代码如下:


type UpdateRequest struct {
	// id
	Id int64 `json:"Id"  form:"Id"  binding:"required,gte=1,lte=9223372036854775807"`
	// 媒体名称
	Name string `json:"Name"  form:"Name"  validate:"required,omitempty,gte=1,lte=8"

数据库中,定义了Name长度为32,代码中校验name长度为8,现在想放开8个汉字,

因为 数据库中,定义了Name长度为32 ,所以,这个不需要调整,这是由MySQL的特性决定的,

来调整一下代码:

type UpdateRequest struct {
	// id
	Id int64 `json:"Id"  form:"Id"  binding:"required,gte=1,lte=9223372036854775807"`
	// 媒体名称
	Name string `json:"Name"  form:"Name"  validate:"required,omitempty,gte=1,lte=32"
	

发现居然也能通过,最后通过查看源码

原来 validator 中在进行字符串校验的时候,采用的是 tune ,一个汉字,也是一个字符,这里是需要大家注意的,

不过 validator 还是很人性的,我们就是需要这样的校验。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档