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  }