const connFuncKey = "connFunc"
func GetConnFunc(ctx *gin.Context) func() interface{} {
return ctx.MustGet(connFuncKey).(func() interface{})
}
func main() {
r := gin.Default()
r.Use(
func(ctx *gin.Context) {
log.Println("level 1, start")
var dbConn *mgo.Session
// log.Println(dbConn == nil)
ctx.Set(connFuncKey, func() interface{} {
if dbConn != nil {
log.Println("连接已存在,直接返回")
return dbConn
}
log.Println("连接不存在初始化")
dbConn = pool.GetMgoConn()
return dbConn
})
ctx.Next()
if dbConn != nil {
log.Println("连接存在需要释放")
pool.PutMgoConn(dbConn)
}
log.Println("level 1 end")
})
r.GET("/",
func(ctx *gin.Context) {
log.Println("level 2, start")
conn := GetConnFunc(ctx)().(*mgo.Session)
err := conn.DB("test").C("test").Insert(map[string]string{"a": "1"})
if err != nil {
log.Println(err)
}
ctx.Next()
log.Println("level 2, end")
},
func(ctx *gin.Context) {
log.Println("level 3 start")
conn := GetConnFunc(ctx)().(*mgo.Session)
err := conn.DB("test").C("test").Insert(map[string]string{"a": "1"})
if err != nil {
log.Println(err)
}
log.Println("level 3 end")
},
)
r.Run(":3000")
}
网友评论