github.com/gogf/gf@v1.16.9/.example/util/gvalid/gvalid_struct_meta.go (about) 1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "github.com/gogf/gf/errors/gerror" 7 "github.com/gogf/gf/frame/g" 8 "github.com/gogf/gf/util/gmeta" 9 ) 10 11 type UserCreateReq struct { 12 gmeta.Meta `v:"UserCreateReq"` 13 Name string 14 Pass string 15 } 16 17 func UserCreateReqChecker(ctx context.Context, rule string, value interface{}, message string, data interface{}) error { 18 user := &UserCreateReq{} 19 if v, ok := data.(*UserCreateReq); ok { 20 user = v 21 } 22 // SELECT COUNT(*) FROM `user` WHERE `name` = xxx 23 count, err := g.Model("user").Ctx(ctx).Where("name", user.Name).Count() 24 if err != nil { 25 return err 26 } 27 if count > 0 { 28 return gerror.Newf(`The name "%s" is already token`, user.Name) 29 } 30 return nil 31 } 32 33 func main() { 34 user := &UserCreateReq{ 35 Name: "john", 36 Pass: "123456", 37 } 38 err := g.Validator().RuleFunc("UserCreateReq", UserCreateReqChecker).CheckStruct(user) 39 fmt.Println(err) 40 }