1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 12:32:21 +00:00

fix ch5-04-validator.md 中代码运行错误

ch5-04章节中最后一段讲解 valdiator 原理的代码,本地运行有如下错误
```
go run web_validate.go
# command-line-arguments
./web_validate.go:42:65: syntax error: unexpected ) at end of statement
```

做了一下简单的修复
This commit is contained in:
orangleliu 2018-09-17 14:50:19 +08:00 committed by GitHub
parent 98fe0efb7d
commit 6f9f0c2143
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -185,8 +185,8 @@ func validate(v interface{}) (bool, string) {
tagValStr := strings.Split(tagContent, "=") tagValStr := strings.Split(tagContent, "=")
tagVal, _ := strconv.ParseInt(tagValStr[1], 10, 64) tagVal, _ := strconv.ParseInt(tagValStr[1], 10, 64)
if val != tagVal { if val != tagVal {
errmsg = "validate int failed, tag is: "+ tagVal) errmsg = "validate int failed, tag is: "+ strconv.FormatInt(tagVal, 10)
return false validateResult = false
} }
case reflect.String: case reflect.String:
val := fieldVal.String() val := fieldVal.String()
@ -203,22 +203,22 @@ func validate(v interface{}) (bool, string) {
// 如果有内嵌的 struct那么深度优先遍历 // 如果有内嵌的 struct那么深度优先遍历
// 就是一个递归过程 // 就是一个递归过程
valInter := fieldVal.Interface() valInter := fieldVal.Interface()
nestedResult := validate(valInter) nestedResult, msg := validate(valInter)
if nestedResult == false { if nestedResult == false {
validateResult = false validateResult = false
errmsg = msg
} }
} }
} }
return validateResult return validateResult, errmsg
} }
func main() { func main() {
var a = T{Age: 10, Nested: Nested{Email: "abc@abc.com"}} var a = T{Age: 10, Nested: Nested{Email: "abc@abc.com"}}
validateResult := validate(a) validateResult, errmsg := validate(a)
fmt.Println(validateResult) fmt.Println(validateResult, errmsg)
} }
``` ```
这里我们简单地对 eq=x 和 email 这两个 tag 进行了支持,读者可以对这个程序进行简单的修改以查看具体的 validate 效果。为了演示精简掉了错误处理和复杂 case 的处理,例如 reflect.Int8/16/32/64reflect.Ptr 等类型的处理,如果给生产环境编写 validate 库的话,请务必做好功能的完善和容错。 这里我们简单地对 eq=x 和 email 这两个 tag 进行了支持,读者可以对这个程序进行简单的修改以查看具体的 validate 效果。为了演示精简掉了错误处理和复杂 case 的处理,例如 reflect.Int8/16/32/64reflect.Ptr 等类型的处理,如果给生产环境编写 validate 库的话,请务必做好功能的完善和容错。