Golang / gin:如何将db传递给路由器功能

时间:2017-06-04 09:33:38

标签: sqlite go go-gin

我正在使用 gin框架。我在主函数中打开sqlite数据库就像这样

...
r.GET("/", GetHomePage)
r.GET("/signin", GetSignIn)
r.POST("/signin", PostSignIn)
...

我在主要功能中有这些路由器处理程序。

PostSignin(c *gin.Context)

如何通过路由器处理程序func // @flow import { ApolloClient, createNetworkInterface } from 'react-apollo'; import fetch from 'isomorphic-fetch'; let apolloClient = null; // Polyfill fetch() on the server (used by apollo-client) if (!process.browser) { global.fetch = fetch; } function create() { return new ApolloClient({ ssrMode: !process.browser, // Disables forceFetch on the server (so queries are only run once) networkInterface: createNetworkInterface({ uri: 'https://api.graph.cool/simple/v1/cixmkt2ul01q00122mksg82pn', // Server URL (must be absolute) opts: { // Additional fetch() options like `credentials` or `headers` credentials: 'same-origin', }, }), }); } 传递该db值?

这样我每次都可以避免在函数中打开和关闭数据库。

更新:我使用go-sqlite3包。

谢谢!

1 个答案:

答案 0 :(得分:2)

假设您已在db中初始化了sql客户端,然后,您可以将其传递到不同的路径

r.GET("/", GetHomePageHandler(&db))

在你的GetHomePageHandler中:

func GetHomePageHandler(sqldb *SQLiteConn) func (*gin.Context) {
    return  func (*gin.Context) {
      . . .
    }
}

其中*SQLiteConn是您的sql db实例的类型。我不知道你目前使用的是哪个包,所以这只是一个例子。

您还可以找到更优雅的解决方法in this answer