gpt4 book ai didi

go - 在 Go 中处理需要访问数据库的中间件

转载 作者:数据小太阳 更新时间:2023-10-29 03:29:52 32 4
gpt4 key购买 nike

我在创建一个将链接到其他路由并需要访问数据库的中间件时遇到问题,我不确定如何解决这个问题。

我将所有应用上下文(包括数据库)存储在名为 AppContext 的结构中。我想创建一个看起来像这样的函数处理程序:

    func SomeHandler(appC *AppContext, next http.Handler) http.Handler {
fn := func(w http.ResponseWriter, r *http.Request) {
// Access the database using appC.db
// Logic that requires access to the database.

next.ServeHTTP(w, r)
}
return http.HandlerFunc(fn)
}

}

main.go中,我试过:

someHandler := middleware.SomeHandler(&appC)

但是,我收到错误消息not enough arguments in call to middleware.SomeHandler。解决此问题的最佳方法是什么?

最佳答案

你得到的错误是由于没有提供第二个参数,next http.Handler

关于如何处理中间件,我建议看一下 http.ServeMux 的实现 https://golang.org/src/net/http/server.go?s=57308:57433#L1890它本质上做了你想做的(然后是一些)用于路由的事情。因此,在这里使用 http.Handler 结构可能比使用 Handler 函数更容易,这样作为函数中的 next http.Handler 参数的 Handler 只是一个字段在父处理程序可以从其 ServeHTTP() 中调用的结构中。

总结一下我的观点,您可能想要使用实现 http.Handler 接口(interface)的结构。这样它就可以拥有子处理程序和数据库访问权限。这样你就不必继续传递这个 AppContext 了。

关于go - 在 Go 中处理需要访问数据库的中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40370206/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com