Validator

smartwalle · 2016-06-13 15:10:49 · 4951 次点击    
这是一个分享于 2016-06-13 15:10:49 的资源,其中的信息可能已经有所发展或是发生改变。

https://github.com/smartwalle/validator

Validator

这是一个用 Golang 写的数据验证组件,主要用于验证 Struct 的属性是否满足特定的规范。

Golang 已经存在很多类似的第三方组件,但是总感觉使用起来不够灵活,尤其是在开发 API 接口的应用程序中,如果数据验证错误,需要返回一个 code 和 message 字段。Validator 这是我之前写的一个,使用起来总觉得不方便。

新版本的 Validator 将数据验证的权限完全将由者处理,开发者为每一个需要验证的属性写相关的验证方法,例:

import (
    "github.com/smartwalle/validator"
    "github.com/smartwalle/errors"
)

type Human struct {
    Name string
    Age  int
}

// 为 Human 需要验证的属性添加方法
func (this Human) NameValidator(n string) error {
    if n == "" {
        // 可以只返回一个 error
        return errors.NewWithCode(1001, "请提供你的名字哦")
    }
    return nil
}

func (this Human) AgeValidator(a int) []error {
    // 也可以返回一个 error slice
    var errList = make([]error, 0, 0)
    if a <= 0 {
        errList = append(errList, errors.NewWithCode(1002, "你确定这是你的年龄?"))
    }

    if a > 100 {
        errList = append(errList, errors.NewWithCode(1003, "你也太长命了吧"))
    }
    return errList
}


// 验证
var h Human
var v = validator.Validate(h)
if !v.OK() {
    fmt.Println("抱歉,验证没有通过")
}

or

var v = validator.Validate(&h)
...

如上所示,验证方法命名规则为:属性名+Validator(如: NameValidator),方法有唯一的参数,即对应属性的值,方法需要返回一个满足 error 接口的对象,如果返回 nil,则表示该验证通过。

LazyValidate

validator.Validate() 方法将一次验证所有的属性,验证完成之后,才会返回验证的结果。为此可能会多耗费一些时间。

如果想快速一点,可以试试 validator.LazyValidate() 方法,该方法会依次验证 Struct 的属性,遇到第一个错误的时候就会停止验证,并将错误信息返回。


入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4951 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传