登录
首页 >  Golang >  Go问答

处理程序返回的 Golang 结构方法可能导致错误

来源:stackoverflow

时间:2024-03-03 12:33:22 442浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《处理程序返回的 Golang 结构方法可能导致错误》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我正在尝试从控制器返回处理函数

在我的 controllers/item.go 文件中:

package controllers

import (
 // ...
)

type controller struct{}

func (c controller) getitems(db *sql.db) http.handler {
    return http.handler(func(w http.responsewriter, r *http.request) {
      // ...
    })
}

在我的 main.go 文件中:

func main() {
    db = db.connect()
    router := mux.newrouter()

    controllers := controllers.controller{}

    router.handlefunc("/items", controllers.getitems(db)).methods("get")
}

您可以看到我正在使用 mux。我的问题是我无法返回处理程序函数。我不断收到此错误:

cannot convert func literal (type func(http.ResponseWriter, *http.Request)) to type http.Handler:
    func(http.ResponseWriter, *http.Request) does not implement http.Handler (missing ServeHTTP method)

解决方案


你不能任意将函数转换为http.handler,但是http包确实提供了一个方便的http.handler结构类型,它满足http.handler接口,并且你可以轻松返回该类型的实例: p>

func (c Controller) GetItems(db *sql.DB) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
         // ...
    })
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

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