golang:validate

《GO语言高级编程》设计中案例,仅作为笔记进行收藏。下面是一个递归的深度优先搜索方式的遍历示例,采用反射对结构体进行树形遍历。

package main

import (
	"fmt"
	"reflect"
	"regexp"
	"strconv"
	"strings"
)

type Nested struct {
	Email string `validate:"email"`
}

type T struct {
	Age int `validate:"eq=10"`
	Nested Nested
}

func validateEmail(input string) bool{
	if pass,_:=regexp.MatchString(`^([\w\.\_]{2,10})@(\w{1,}).([a-z]{2,4})$`,input);pass{
		return true
	}
	return false
}

func validate(v interface{})(bool,string){
	validateResult:=true
	errmsg:="success"
	vt:=reflect.TypeOf(v)
	vv:=reflect.ValueOf(v)

	for i:=0;i

由于Go的反射在性能上不太出众,如果对结构体进行校验时使用了大量反射,可能会影响到程序性能。可采用Go内置的Parser对源代码进行扫描,然后根据结构体的定义生产校验代码,避免反射。

你可能感兴趣的:(golang)