mgo 併發

官方權威

https://www.mongodb.com/blog/post/running-mongodb-queries-concurrently-with-go

代碼

package main

import (
	"fmt"
	"github.com/globalsign/mgo"
	"github.com/globalsign/mgo/bson"
)
// mgo 併發處理 https://www.mongodb.com/blog/post/running-mongodb-queries-concurrently-with-go
var MgoSession *mgo.Session

func initSession() { // 初始化 放在 main 文件中進行
	dialInfo := &mgo.DialInfo{
		Addrs:     []string{"localhost:27017"},
		Direct:    false,
		PoolLimit: 4096,
		Database:  "yang",
		Username:  "",
		Password:  "",
	}
	var err error
	MgoSession, err = mgo.DialWithInfo(dialInfo)
	if err != nil {
		fmt.Println(err)
	}
}

type dbCollection func(collection *mgo.Collection) (err error)

// 這種方式適合  傳入函數 這樣 避免了每次都 關閉 忘記關閉的情況
// 應該也適合 channel
// 項目中可用作 公共 方法 操作mongo
func handlerCollection(colName string, query dbCollection) error {
	s := MgoSession.Copy()
	defer s.Close()
	c := s.DB("yolo").C(colName)
	return query(c)
}

type aa2 struct {
	Name string `bson:"name"`
}

func main() {
	initSession()
	var aObj aa2
	query := func(c *mgo.Collection) error { // 匿名函數
		return c.Find(bson.M{"name": "曉東"}).One(&aObj)
	}
	err := handlerCollection("yang", query)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(aObj)

}

引用
http://www.jyguagua.com/?p=3126

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章