1、mgotools代码
package mgotools
import (
"fmt"
"gopkg.in/mgo.v2"
)
type DataStore struct {
MgoUrl string
Session *mgo.Session
DB string
}
func (ds *DataStore) MgoInit() {
session, err := mgo.Dial(ds.MgoUrl)
if err != nil {
fmt.Println(err)
}
ds.Session = session
}
func (ds *DataStore) MgoConnect(collection string) (*mgo.Session, *mgo.Collection) {
if ds.Session != nil {
ms := ds.Session.Copy()
c := ms.DB(ds.DB).C(collection)
ms.SetMode(mgo.Monotonic, true)
return ms, c
} else {
return nil, nil
}
}
func (ds *DataStore) FindOne(collection string, query, result interface{}) error {
ms, c := ds.MgoConnect(collection)
if c != nil {
defer ms.Close()
return c.Find(query).One(result)
} else {
return fmt.Errorf("connect mongodb error")
}
}
2、mgotools_test代码
package mgotools_test
import (
"gitlab.liquidnetwork.com/box_backend/boxapigo/utils/mgotools"
"gopkg.in/mgo.v2/bson"
"testing"
)
type User struct {
UserName string `json:"username"`
Password string `json:"password"`
AccountName string `json:"account_name"`
PhoneNumber string `json:"phone_number"`
CreateTime string `json:"create_time"`
EditTime string `json:"edit_time"`
}
var bdssDs mgotools.DataStore
func init() {
ds := mgotools.DataStore{
DB: "bdss",
MgoUrl: "mongodb://bdss:1q2w3e4r@localhost/bdss",
Session: nil,
}
ds.MgoInit()
bdssDs = ds
}
func GetDs() mgotools.DataStore {
return bdssDs
}
func TestDataStore_FindOne(t *testing.T) {
var user = User{}
ds := GetDs()
err := ds.FindOne("User", bson.M{"username": "admin"}, &user)
if err != nil {
panic(err)
}
}