登录
首页 >  Golang >  Go问答

处理http请求的通用函数

来源:stackoverflow

时间:2024-03-17 09:54:29 147浏览 收藏

处理HTTP请求的通用函数可简化Web服务开发,允许轻松处理请求并返回JSON响应。该函数采用处理函数,该处理函数负责处理请求逻辑并生成响应。它处理JSON解码、错误处理和HTTP标头设置,为开发人员提供了一个简洁且可扩展的解决方案,以处理各种HTTP请求。

问题内容

下面是处理http请求的通用函数

func process[req golibrequest, resp golibresponse](w http.responsewriter, r *http.request, processfunc func(request golibrequest, response *golibresponse) error) http.handlerfunc {
    return func(w http.responsewriter, r *http.request) {

        request := golibrequest{msgid: getmsgid()}
        response := golibresponse{msgid: getmsgid()}

        if err := json.newdecoder(r.body).decode(&request); err != nil {
            logger.errorf("decoding body failed: %v", err)
            reserr := newhttperror(err, 400, "bad request : invalid json.", "egn002")
            response.error = reserr
            json.newencoder(w).encode(response)
            return
        }

        reserr := processfunc(request, &response)
        if reserr != nil {
            logger.errorf("unable to process request: %v", reserr)
            response.error = reserr
            w.writeheader(http.statusinternalservererror)
        } else {
            w.writeheader(200)
        }

        w.header().set("content-type", "application/json")
        if err := json.newencoder(w).encode(response); err != nil {
            log.printf("encoding response failed: %v", err)
        }
    }

}

我如何正确地将这个函数传递给mux路由器。

当前通过如下,但出现错误

sm := http.NewServeMux()
    sm.HandleFunc("/login", lib.Process(ProcessLogin))
    sm.Handle("/metrics", promhttp.Handler())

正确答案


您的进程函数需要三个参数,但您只传递一个 lib.process(processlogin)

尝试在没有 http.responsewriterhttp.request 的情况下重构流程函数:

func Process[Req GoLibRequest, Resp GoLibResponse](processFunc func(request GoLibRequest, response *GoLibResponse) error) http.HandlerFunc {

终于介绍完啦!小伙伴们,这篇关于《处理http请求的通用函数》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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