feat(Go-StudyExample):
2020/12/31:添加container包使用示例和源码分析
2020/12/31:添加validator.v8源码解析和使用示例
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
/*
|
||||
* @Author : huangzj
|
||||
* @Time : 2020/12/11 16:16
|
||||
* @Description:
|
||||
*/
|
||||
|
||||
package testValidator
|
||||
|
||||
import (
|
||||
"Go-Tool/SourceAnalysisAndTool/validator.v8/sourceAnalysis/gopkg.in/go-playground/validator.v8"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestValidator(t *testing.T) {
|
||||
fmt.Println("测试别名校验器")
|
||||
testAlias()
|
||||
|
||||
fmt.Println()
|
||||
fmt.Println("测试默认和自定义tag校验器")
|
||||
testTag()
|
||||
|
||||
fmt.Println()
|
||||
fmt.Println("测试字段校验器")
|
||||
testField()
|
||||
|
||||
fmt.Println()
|
||||
fmt.Println("测试结构体校验器")
|
||||
testStruct()
|
||||
|
||||
}
|
||||
|
||||
func testStruct() {
|
||||
//添加结构体校验,对结构体进行处理之后,validator的标签还是会起作用
|
||||
config := &validator.Config{
|
||||
TagName: "validate",
|
||||
}
|
||||
valid := validator.New(config)
|
||||
valid.RegisterStructValidation(func(v *validator.Validate, structLevel *validator.StructLevel) {
|
||||
c := structLevel.CurrentStruct.Interface().(Cat)
|
||||
if c.Age < 100 {
|
||||
fmt.Println("猫的岁数不能小于100")
|
||||
}
|
||||
}, Cat{})
|
||||
p := Person{
|
||||
Name: "192.168.0.1",
|
||||
M: map[string]int{"A": 1},
|
||||
H: 2000,
|
||||
Exist: false,
|
||||
Require: false,
|
||||
Cat: Cat{
|
||||
Age: 0,
|
||||
Ower: Ower{},
|
||||
},
|
||||
}
|
||||
|
||||
err := valid.Struct(p)
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
func testField() {
|
||||
//如果注册了对应的Field,则会调用自定义的方法,不会再使用validator定义的标签
|
||||
//这边测试了结构体和基本类型,都是如上述描述的这么处理
|
||||
config := &validator.Config{
|
||||
TagName: "validate",
|
||||
}
|
||||
valid := validator.New(config)
|
||||
valid.RegisterAliasValidation("ipe", "ip|ipv4|ipv6")
|
||||
|
||||
valid.RegisterCustomTypeFunc(func(field reflect.Value) interface{} {
|
||||
d := field.Interface().(Cat)
|
||||
if d.Age < 50 {
|
||||
fmt.Println("狗的岁数不能小于50")
|
||||
}
|
||||
return field
|
||||
}, Cat{})
|
||||
|
||||
p := Person{
|
||||
Name: "192.168.0.1",
|
||||
M: map[string]int{"A": 1},
|
||||
H: 2000,
|
||||
Exist: false,
|
||||
Require: false,
|
||||
Cat: Cat{
|
||||
Age: 0,
|
||||
Ower: Ower{},
|
||||
},
|
||||
}
|
||||
err := valid.Struct(p)
|
||||
fmt.Println(err)
|
||||
|
||||
valid.RegisterCustomTypeFunc(func(field reflect.Value) interface{} {
|
||||
d := field.Interface().(int)
|
||||
if d != 10 {
|
||||
fmt.Println("测试一下")
|
||||
}
|
||||
return field
|
||||
}, 1)
|
||||
|
||||
err1 := valid.Struct(p)
|
||||
fmt.Println(err1)
|
||||
|
||||
}
|
||||
|
||||
func testTag() {
|
||||
w := Woman{
|
||||
Name: "my name is Woman",
|
||||
}
|
||||
|
||||
w1 := Woman{
|
||||
Name: "my name is wo-man",
|
||||
}
|
||||
|
||||
config := &validator.Config{
|
||||
TagName: "validate",
|
||||
}
|
||||
valid := validator.New(config)
|
||||
_ = valid.RegisterValidation("diy", func(v *validator.Validate, topStruct reflect.Value, currentStruct reflect.Value, field reflect.Value, fieldtype reflect.Type, fieldKind reflect.Kind, param string) bool {
|
||||
s := field.Interface().(string)
|
||||
|
||||
i, _ := strconv.ParseInt(param, 0, 64)
|
||||
if int64(len(s)) < i || strings.Contains(s, "Woman") {
|
||||
fmt.Println("校验一下")
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
||||
err := valid.Struct(w)
|
||||
fmt.Println(err)
|
||||
|
||||
err1 := valid.Struct(w1)
|
||||
fmt.Println(err1)
|
||||
}
|
||||
|
||||
func testAlias() {
|
||||
m := Man{
|
||||
Name: "192.168.0.1",
|
||||
}
|
||||
|
||||
m1 := Man{
|
||||
Name: "213123123",
|
||||
}
|
||||
|
||||
config := &validator.Config{
|
||||
TagName: "validate",
|
||||
}
|
||||
valid := validator.New(config)
|
||||
valid.RegisterAliasValidation("ipe", "ip|ipv4|ipv6")
|
||||
err := valid.Struct(m)
|
||||
fmt.Println(err)
|
||||
|
||||
err1 := valid.Struct(m1)
|
||||
fmt.Println(err1)
|
||||
}
|
||||
Reference in New Issue
Block a user