我见过一些看起来像这样的 go 代码:type userForm struct { Name string `json:"name" validate:"min=2"` Surname string `json:"surname" validate:"min=2"` Phone string `json:"phone" validate:"min=10"` Email string `json:"email,omitempty" validate:"omitempty,email"`}type emailForm struct { Email string `json:"email" validate:"email"`}func decodeUserForm(r *http.Request) (userForm, error) { var body userForm d := json.NewDecoder(r.Body) if err := d.Decode(&body); err != nil { return body, NewHTTPError(err, 400, "unable to decode user form") } return body, validateStruct(body)}func decodeEmailForm(r *http.Request) (emailForm, error) { var body emailForm d := json.NewDecoder(r.Body) if err := d.Decode(&body); err != nil { return body, NewHTTPError(err, 400, "unable to decode email form") } return body, validateStruct(body)}我发现两个功能是多余的。有没有更简单的方法将这两者合并成一个更通用的函数?围棋是好的做法吗?
1 回答

慕斯709654
TA贡献1840条经验 获得超5个赞
func decodeForm(r *http.Request, dst interface{}) error {
if err := json.NewDecoder(r.Body).Decode(dst); err != nil {
return NewHTTPError(err, 400, "unable to decode email form")
}
return validateStruct(dst)
}
然后像这样使用它:
var body emailForm
if err := decodeForm(r, &body); err != nil {
panic(err)
}
- 1 回答
- 0 关注
- 164 浏览
添加回答
举报
0/150
提交
取消