Skip to content

Instantly share code, notes, and snippets.

@rafalsobota
Created November 8, 2013 11:40
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rafalsobota/7369852 to your computer and use it in GitHub Desktop.
Save rafalsobota/7369852 to your computer and use it in GitHub Desktop.
My naive mgo-based app file structure
import (
"labix.org/v2/mgo"
"log"
"os"
"regexp"
)
var (
mongoSession *mgo.Session
database *mgo.Database
)
func connectWithDB() {
var err error
dbUri := os.Getenv("MONGODB_URI")
if dbUri == "" {
dbUri = "localhost"
}
dbName := regexp.MustCompile("([\\w-]+)$").FindString(dbUri)
if dbName == "" {
dbName = "my-db"
}
if mongoSession, err = mgo.Dial(dbUri); err != nil {
panic(err)
}
log.Println("Connected to mongodb")
database = mongoSession.DB(dbName)
}
func initCollections() {
UsersCollection.Collection = database.C("users")
}
func init() {
connectWithDB()
initCollections()
}
package models
import (
"instapray.com/crypto"
"labix.org/v2/mgo/bson"
)
type User struct {
Id bson.ObjectId `bson:"_id,omitempty"`
Login string `bson:"login"`
Email string `bson:"email"`
PasswordHash string `bson:"password_hash"`
Firstname string `bson:"firstname,omitempty"`
Lastname string `bson:"lastname,omitempty"`
}
package main
import "mypackage/models"
func userHandler(w http.ResponseWriter, r *http.Request) {
models.UsersCollection.DoSomething() // ...
}
package models
import (
"labix.org/v2/mgo"
"labix.org/v2/mgo/bson"
"strings"
)
type UsersCollectionType struct {
*mgo.Collection
}
func (c UsersCollectionType) FindByLogin(login string) (User, error) {
var user User
login = strings.ToLower(login)
if err := c.Collection.Find(M{"l": login}).One(&user); err != nil {
return user, err
} else {
return user, nil
}
}
var UsersCollection UsersCollectionType
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment