Golang 实体参数校验
#golang #reflect
A:“请用一句话让别人知道你写过Golang。”
B:“if err!= nil …”
起因 只要是接触过Golang的人,无不为其if err != nil的语法感到惊奇,或是大加赞赏,或是狠狠痛批。作为使用者,不管喜欢也好,反对也罢, 目前还是要接受这种错误处理模式。
而最令人头痛的就是请求参数中各种值的校验。比如Get请求中接收分页参数时,需要将string格式的参数转换成int类型,再如时间类型的参数 转换, 诸如此类,等等等等。好家伙,一个接口写完if err != nil的判断占了一多半的行数,看着实在不爽。
下面就是一个典型的例子,而且这个接口参数还不是特别多
func Export(c *gin.Context) { //删除开头 //... var param map[string]string err := c.ShouldBindJSON(¶m) if err != nil { ErrRsponse(c,errCode) return } var vId, userId, userName, format string if v, ok := param["vId"]; ok { vId = v } else { ErrRsponse(c,errCode) return } if len(vId) == 0 { ErrRsponse(c,errCode) return } if v, ok := param["userId"]; ok { userId = v } else { ErrRsponse(c,errCode) return } if v, ok := param["userName"]; ok { userName = v } else { ErrRsponse(c,errCode) return } if v, ok := param["format"]; ok { format = v } else { ErrRsponse(c,errCode) return } if !