为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 golang 进行通用解码

如何使用 golang 进行通用解码

Go
交互式爱情 2022-06-06 15:07:21
我见过一些看起来像这样的 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)

}


查看完整回答
反对 回复 2022-06-06
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号