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

r03*_*r03 6 go mgo

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

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

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

有没有办法在我的代码中缩短它或避免大量的这些:

if err != nil {
    return err
}
Run Code Online (Sandbox Code Playgroud)

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

One*_*One 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()
}
Run Code Online (Sandbox Code Playgroud)

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