范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

beegovalidation简单使用

  直接使用package main  import (     "github.com/astaxie/beego/validation"     "log" )  type User struct {     Name string     Age int }  func main() {     u := User{Age:40}     valid := validation.Validation{}  //实例化一个验证对象     valid.Required(u.Name, "name")  //不能为空     valid.MaxSize(u.Name, 15, "nameMax")  //最大长度     valid.Range(u.Age, 0, 18, "age")  //数值返回      if valid.HasErrors() {         for _, err := range valid.Errors {             log.Println(err.Key, err.Message)         }     }     // or use like this     if v := valid.Max(u.Age, 140, "age"); !v.Ok {         log.Println(v.Error.Key, v.Error.Message)     }     // 定制错误信息     u2 := User{"jihite", 10}     minAge := 18     valid.Min(u2.Age, minAge, "age").Message("少儿不宜!")     // 错误信息格式化     valid.Min(u2.Age, minAge, "age").Message("%d不禁", minAge)     if valid.HasErrors() {         for _, err := range valid.Errors {             log.Println(err.Key, err.Message)         }     } }
  输出 $ go run main.go 2022/03/01 15:26:20 name  Can not be empty 2022/03/01 15:26:20 age  Range is 0 to 18 2022/03/01 15:26:20 name  Can not be empty 2022/03/01 15:26:20 age  Range is 0 to 18 2022/03/01 15:26:20 age 少儿不宜! 2022/03/01 15:26:20 age 18不禁 通过structTag使用package main import (     "log"     "strings"      "github.com/astaxie/beego/validation" )  // 验证函数写在 "valid" tag 的标签里 // 各个函数之间用分号 ";" 分隔,分号后面可以有空格 // 参数用括号 "()" 括起来,多个参数之间用逗号 "," 分开,逗号后面可以有空格 // 正则函数(Match)的匹配模式用两斜杠 "/" 括起来 // 各个函数的结果的 key 值为字段名.验证函数名 type user struct {     Id     int     Name   string `valid:"Required;Match(/^Bee.*/)"` // Name 不能为空并且以 Bee 开头     Age    int    `valid:"Range(1, 140)"` // 1 <= Age <= 140,超出此范围即为不合法     Email  string `valid:"Email; MaxSize(100)"` // Email 字段需要符合邮箱格式,并且最大长度不能大于 100 个字符     Mobile string `valid:"Mobile"` // Mobile 必须为正确的手机号     IP     string `valid:"IP"` // IP 必须为一个正确的 IPv4 地址 }  // 如果你的 struct 实现了接口 validation.ValidFormer // 当 StructTag 中的测试都成功时,将会执行 Valid 函数进行自定义验证 func (u *user) Valid(v *validation.Validation) {     if strings.Index(u.Name, "admin") != -1 {         // 通过 SetError 设置 Name 的错误信息,HasErrors 将会返回 true         v.SetError("Name", "名称里不能含有 admin")     } }  func main() {     valid := validation.Validation{}     u := user{Name: "Beego", Age: 2, Email: "dev@beego.me", Mobile:"13630450678"}     b, err := valid.Valid(&u)     if err != nil {         // handle error     }     if !b {         // validation does not pass         // blabla...gg         for _, err := range valid.Errors {             log.Println(err.Key, err.Message)         }     } } type User2 struct {     Name string     Age int }  func main2() {     u := User2{Age:40}     valid := validation.Validation{}  //实例化一个验证对象     valid.Required(u.Name, "name")  //不能为空     valid.MaxSize(u.Name, 15, "nameMax")  //最大长度     valid.Range(u.Age, 0, 18, "age")  //数值返回      if valid.HasErrors() {         for _, err := range valid.Errors {             log.Println(err.Key, err.Message)         }     }     // or use like this     if v := valid.Max(u.Age, 140, "age"); !v.Ok {         log.Println(v.Error.Key, v.Error.Message)     }     // 定制错误信息     u2 := User2{"jihite", 10}     minAge := 18     valid.Min(u2.Age, minAge, "age").Message("少儿不宜!")     // 错误信息格式化     valid.Min(u2.Age, minAge, "age").Message("%d不禁", minAge)     if valid.HasErrors() {         for _, err := range valid.Errors {             log.Println(err.Key, err.Message)         }     } }$ go run main.go 2022/03/01 15:27:11 IP.IP. IP Must be a valid ip addressStructTag 可用的验证函数Required   不为空,即各个类型要求不为其零值Min(min int)   最小值,有效类型:int  ,其他类型都将不能通过验证Max(max int)   最大值,有效类型:int  ,其他类型都将不能通过验证Range(min, max int)   数值的范围,有效类型:int  ,他类型都将不能通过验证MinSize(min int)   最小长度,有效类型:string slice  ,其他类型都将不能通过验证MaxSize(max int)   最大长度,有效类型:string slice  ,其他类型都将不能通过验证Length(length int)   指定长度,有效类型:string slice  ,其他类型都将不能通过验证Alpha   alpha字符,有效类型:string  ,其他类型都将不能通过验证Numeric   数字,有效类型:string  ,其他类型都将不能通过验证AlphaNumeric   alpha 字符或数字,有效类型:string  ,其他类型都将不能通过验证Match(pattern string)   正则匹配,有效类型:string  ,其他类型都将被转成字符串再匹配(fmt.Sprintf("%v", obj).Match)AlphaDash   alpha 字符或数字或横杠 -_  ,有效类型:string  ,其他类型都将不能通过验证Email   邮箱格式,有效类型:string  ,其他类型都将不能通过验证IP   IP 格式,目前只支持 IPv4 格式验证,有效类型:string  ,其他类型都将不能通过验证Base64   base64 编码,有效类型:string  ,其他类型都将不能通过验证Mobile   手机号,有效类型:string  ,其他类型都将不能通过验证Tel   固定电话号,有效类型:string  ,其他类型都将不能通过验证Phone   手机号或固定电话号,有效类型:string  ,其他类型都将不能通过验证ZipCode   邮政编码,有效类型:string  ,其他类型都将不能通过验证

定位中型SUV,顶配26。98万,零百加速4。8s,MARVELR怎么样?从目前的汽车销售数据来看,新能源汽车的销量逐日递增,凭借低于燃油车的油耗和较快的提速成绩再加上更高的NVH表现,新能源汽赢得越来越多消费者的认可,再加上近几年纯电新能源在技术上的快五月份哪款iPhone值得推荐10002000iPhoneXR128G采用Xsmax同款A12处理器,各方面都比较均衡,单层主板散热比较好,续航杠杠的,游戏神机,推荐学生党和喜欢玩游戏的朋友入手。2000300微信即将取代对讲机?微信能否取代对讲机?关于这个问题,想必不少人都有疑问。那么随着微信软件的不断成熟优化,是否真的能迎来替代对讲机的一天呢?下面小峰就为大家揭开真相!1专业性微信作为手机应用的一种娱乐冷门小钢炮旗舰手机,2K屏超声波指纹,跌至2749元提到魅族品牌,很多人想到的都是唏嘘不已,为什么这么说呢?可能如果比较年轻点的消费者对于品牌并没有太熟悉,因为它只是一个普通二线品牌,甚至还没什么名气。但是要把时间放到过去,魅族还是三款大跳水的旗舰手机,最高一款直降1700,正是抄底好时机三款大跳水的旗舰手机,最高一款直降1700,正是抄底好时机第一款小米11Ultra这个想必不用多说,为了给小米12Ultra让路,小米11Ultra直接大放血,5499的价格官方直曝光非常出色OPPOReno8Pro,OPPOReno7悲惨让路,超低价很感人OPPOReno8Pro新的自主开发的图像算法,在像素级提亮皮肤,显示原生,的自然皮肤,人工智能闪光引擎得到了极大的优化。凭借3200万像素的IMX709传感器,它可以帮助您拍摄更中国解禁加拿大油菜籽进口一天后,加拿大就禁了中兴华为亚太日报冬雨犹豫了三年时间,加拿大还是对华为和中兴下手了。据英国卫报报道,加拿大创新科学与工业部长商鹏飞19日下午在渥太华宣布,出于国家安全的考虑,加拿大将禁止中国电信公司华为和中打破常规,颠覆性突破!世界首艘智能无人航母下水简直太强大,全球首次,震撼世界!它的出现甚至可以改变海洋战争的形式。可以说,这是中国国防事业的一个崭新的里程碑,它的研发成功,不仅令中国海军如虎添翼,拥有更为强大的军事实力和军事潜天龙HOME350音响立体音质,宅家享受专业影音体验平时比较喜欢一个人在家看电影,家里也有一台很大的液晶电视,虽然画质还不错,但音质比较一般。在用电视播放电影时,总是找不到那种沉浸式的感觉,时间久了我觉得自己似乎非常需要一台合适的专从5699元降至2999元,IP68防水50倍变焦,安卓机皇更亲民了很多人买手机,都喜欢看手机的配置,比如用什么处理器芯片型号,镜头有多少万像素,用什么镜头,屏幕是什么材质,分辨率如何等等,这些可以说是纸面上的参数,并不代表实际的体验,而从实际体验骁龙8Plus骁龙7齐亮相,采用台积电4nm工艺,骁龙8Plus功耗降低20日晚八点,高通骁龙之夜,如期而至,骁龙8移动平台和第一代骁龙7也如期而至。发布会上小米官宣即将发布搭载骁龙8的新旗舰,OPPO也表示23日的Reno新品也将搭载最新一代骁龙7系