beego 如何依赖注入mgo到controller

发布于 2021-11-29 19:15:48 字数 1029 浏览 744 评论 1

刚从java投向golang,觉得golang真的很有趣。beego给我感觉就像java的springmvc一样框架,强大!

言归正传,在项目尝试使用beego+mgo的时候不知道应该如何将mgo.session注入到controller。目前折衷的方法是在main初始化后存在全局变量,然后在一个baseController的prepare set进去。但是感觉这样不是我想要的,不知道是否有方法可以直接set到baseController里。新手求教,不胜感激!

目前代码大概如下:

func main() {
	sess := initMongoDB()
	defer sess.Close()

	models.DataSource = models.DataStore{sess}

	beego.Run()
}
//controller
type genericController struct {
	beego.Controller
	models.DataStore
}

func (g *genericController) Prepare(){
	fmt.Println("genericController prepare")
	g.DataStore = models.DataSource
}
//UserController
func (c *UserController) Save(){
	msess := c.GetMGoSession()
	defer msess.Close()

	msess.DB("test").C("user").Insert(&User{Name:"luis"})

	//..
}





如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

樱花落人离去 2021-11-29 21:16:40

觉得没有必要给每个连接创建一个mgo session,mgo内部有连接池,session是线程安全的,事实上之前我在网站上也用单个连接创建一个session,反而出现很多socket连接未释放的问题(有执行close),导致数据库无法连接的情况,再没有做MongoDB最大连接限制的时候甚至连ssh都没法登录了。现在我的做法是用一个全局mgo session,go一个goroutine用来定时ping重连,已防止因为MongoDB Server重启等原因造成的session过期

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文