diff --git a/ch6-web/ch6-04-validator.md b/ch6-web/ch6-04-validator.md index bf75e6d..ceaed91 100644 --- a/ch6-web/ch6-04-validator.md +++ b/ch6-web/ch6-04-validator.md @@ -2,9 +2,38 @@ 社区里曾经有人用这张图来嘲笑 PHP: -![validate 流程](../images/validate.jpg) +![validate 流程](../images/ch6-04-validate.jpg) 实际上这是一个语言无关的场景,需要进行字段校验的情况有很多,web 系统的 Form/json 提交只是一个典型的例子。我们用 go 来写一个类似上图的校验 demo。然后研究怎么一步步对其进行改进。假设我们的数据已经通过某个 binding 库绑定到了具体的 struct 上。 ```go -``` \ No newline at end of file +type RegisterReq struct { + Username string + PasswordNew string + PasswordRepeat string + Email string +} + +func register(req RegisterReq) error{ + if len(req.Username) > 0 { + if len(req.PasswordNew) > 0 && len(req.PasswordRepeat) > 0 { + if req.PasswordNew == req.PasswordRepeat { + if emailFormatValid(req.Email) { + createUser() + return nil + } else { + return errors.New("invalid email") + } + } else { + return errors.New("password and reinput must be the same") + } + } else { + return errors.New("password and password reinput must be longer than 0") + } + } else { + return errors.New("length of username cannot be 0") + } +} +``` + +我们在 golang 里成功写出了 hadoken 开路的箭头型代码。。这种代码一般怎么进行优化呢? diff --git a/images/validate.jpg b/images/ch6-04-validate.jpg similarity index 100% rename from images/validate.jpg rename to images/ch6-04-validate.jpg