登录
首页 >  Golang >  Go问答

使用 Golang 进行通用解析的方法

来源:stackoverflow

时间:2024-03-10 12:36:17 468浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《使用 Golang 进行通用解析的方法》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

我见过一些如下所示的 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)
}

我发现两个函数是多余的。有没有更简单的方法将这两个合并为更通用的函数?这是 go 中的良好实践吗?


解决方案


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)
}

本篇关于《使用 Golang 进行通用解析的方法》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>