2016-04-05 16 views
3

MongoDB (gopkg.in/mgo.v2 paketi) go go uygulamasında bir veritabanı olarak kullanıyorum. MongoDB'nin en iyi uygulamalarına göre, uygulama başladığında bağlantıyı açmalı ve uygulama sona erdiğinde onu kapatmalıyım. Ben main işlevinde bu kod yürütmesine eğerGo'da MongoDB oturumuyla doğru şekilde nasıl çalışılır?

session, err := mgo.Dial(mongodbURL) 
if err != nil { 
    panic(err) 
} 
defer session.Close() 

Tüm iyi olacaktır: yani bağlantı ı defer inşaat kullanabilirsiniz kapalı olacaktır doğrulamak için. Ama bu kodu ayrı bir dosyada tutmak istiyorum. Eğer bu seansı yaparsam, metot çalıştırıldıktan sonra kapanır. MongoDB en iyi uygulamalarına göre Golang'da oturum açmak ve kapatmak için en iyi yol hangisidir?

cevap

4

Böyle bir şey yapabilirsiniz. DB başlatma

package common 

    import "gopkg.in/mgo.v2" 

    var mgoSession *mgo.Session 

    // Creates a new session if mgoSession is nil i.e there is no active mongo session. 
    //If there is an active mongo session it will return a Clone 
    func GetMongoSession() *mgo.Session { 
     if mgoSession == nil { 
      var err error 
      mgoSession, err = mgo.Dial(mongo_conn_str) 
      if err != nil { 
       log.Fatal("Failed to start the Mongo session") 
      } 
     } 
     return mgoSession.Clone() 
    } 

Clone yapar ilk oturumdan aynı yuvasını yeniden bir paket oluşturun. Bu yöntemi çağırabilirsiniz diğer paketlerde Şimdi

:

package main 

session := common.GetMongoSession() 
defer session.Close() 
+0

Çalışıyor, teşekkürler! – Cortwave

+0

aslında Clone() tarafından yapılmış olsaydık kapanış seansına ihtiyacımız var mı? –

2

erteleme() sonra kod diğer bölümünde bölümüne geçmek,

func main(){ 
    // ... other stuff 
    session, err := mgo.Dial(mongodbURL) 
     if err != nil { 
     panic(err) 
     } 
    defer session.Close() 
    doThinginOtherFile(session) 
} 

It can sana benziyor Gerekirse klonlama/kopyalama oturumları.

İlgili konular