https://github.com/ormissia/go-opv
Golang object parameter verifier
https://github.com/ormissia/go-opv
golang
Last synced: 3 months ago
JSON representation
Golang object parameter verifier
- Host: GitHub
- URL: https://github.com/ormissia/go-opv
- Owner: ormissia
- License: mit
- Created: 2021-07-31T13:33:08.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2021-08-25T09:17:08.000Z (almost 4 years ago)
- Last Synced: 2025-01-02T07:44:44.068Z (5 months ago)
- Topics: golang
- Language: Go
- Homepage:
- Size: 25.4 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Golang object parameter verifier
[](https://pkg.go.dev/github.com/ormissia/go-opv)





> Golang 对象参数验证器
引用方式
```bash
go get github.com/ormissia/go-opv
``````go
import "github.com/ormissia/go-opv"
```## 使用示例
```go
package mainimport (
"log"go_opv "github.com/ormissia/go-opv"
)type User struct {
Name string `go-opv:"名字,ge:0,le:20"` // Name >=0 && Name <=20
Age int `go-opv:"ge:0,lt:100"` // Age >= 0 && Age < 100
}func init() {
// 使用默认配置:struct tag名字为"go-opv",规则与限定值的分隔符为":"
myVerifier = go_opv.NewVerifier()
// 初始化一个验证规则:Age字段大于等于0,小于200
userRequestRules = go_opv.Rules{
"Age": []string{"年龄",myVerifier.Ge("0"), myVerifier.Lt("200")},
}
}var myVerifier go_opv.Verifier
var userRequestRules go_opv.Rulesfunc main() {
// ShouldBind(&user) in Gin framework or other generated object
user := User{
Name: "ormissia",
Age: 1900000,
}// 两种验证方式混合,函数参数中传入自定义规则时候会覆盖struct tag上定义的规则
// 根据自定义规则Age >= 0 && Age < 200,Age的值为190,符合规则,验证通过
if err := myVerifier.Verify(user, userRequestRules); err != nil {
log.Println(err)
} else {
log.Println("pass")
}// 只用struct的tag验证
// 根据tag上定义的规则Age >= 0 && Age < 100,Age的值为190,不符合规则,验证不通过
if err := myVerifier.Verify(user); err != nil {
log.Println(err)
} else {
log.Println("pass")
}
}
```验证结果:
```bash
2021/08/09 22:14:43 pass
2021/08/09 22:14:43 Age length or value is illegal: lt:100
```## 支持创建自定义属性的验证器
```go
//初始化自定义属性的验证器,并将struct tag名字设为"myVerifier",规则与限定值的分隔符设为"#"
customVerifier := go_opv.NewVerifier(go_opv.SetTagPrefix("myVerifier"), go_opv.SetSeparator("#"))
```这时候`struct`标签应该写成:
```go
type User struct {
Name string `myVerifier:"ge#0,le#20"` //Name >=0 && Name <=20
Age int `myVerifier:"ge#0,lt#100"` //Age >= 0 && Age < 100
}
```---
## TODO
- ~~写example~~
- 增加中文长度判断支持
- 写测试用例
- 增加`map`验证器
- ~~增加`tag`标记模式~~
- 通过`tag`生成规则的方式,关注性能
- ~~自定义返回错误信息中字段中文名称~~---
## 灵感来源
- [gin-vue-admin中实体参数校验方式](https://github.com/flipped-aurora/gin-vue-admin/blob/186ecbf6b8bd5d2ce2b4856de2f0265846483a50/server/utils/validator.go#L107)
- [函数选项模式](https://ormissia.github.io/posts/knowledge/2001-go-partten-1/)