为MongoDB上的CRUD操作组织Go代码

时间:2014-08-02 21:31:28

标签: go mgo

我在Go中编写了一个Web应用程序,但是我的代码组织有些麻烦 对于MongoDB上的基本CRUD操作,我总是必须在代码的开头做这样的事情:

session, err := mgo.Dial("localhost")
if err != nil {
    return err
}
defer session.Close()

但我不喜欢我总是要重复相同的代码。

有没有办法让它缩短或避免在我的代码中使用很多:

if err != nil {
    return err
}

我是Go的新手,所以也许我错过了一些明显的东西。

1 个答案:

答案 0 :(得分:3)

首先是实际问题,不,那就是检查错误。

其次,使用mgo的正确方法是每次需要做一些sesson并克隆它,例如:

var (
    mgoSession *mgo.Session
)

func init() {
    sess, err := mgo.Dial("localhost")
    if err != nil {
        panic(err) // no, not really
    }
    mgoSession = sess
}

func do_stuff_with_mgo() {
    sess := mgoSession.Clone()
    defer sess.Close()
    //do stuff with sess
}

func main() {
    go do_stuff_with_mgo()
    go do_stuff_with_mgo()
    do_stuff_with_mgo()
}

另请查看有关mgo的this文章(我不是作者,但它帮助我学习了mgo,但它可能有点过时了。)