追記
- 2019/01/20
- https://github.com/go-mgo/mgo がもうメンテされてないそうので、サンプルでは、そのフォークである https://github.com/globalsign/mgo を使うようにしました。インターフェースは一緒です。
 - Thanks to @NishidaRyu416
 
 
Go言語でも
mongodb使いたいじゃないですか.
The MongoDB driver for Go
とりあえず動く、まで
- mongodbのインストール
- 割愛(
brew install mongodb?) - 個人的には 
docker run -it -p 27017:27017 --rm mongoがオススメです 
 - 割愛(
 - Goのインストール
- 割愛(
brew install go?) 
 - 割愛(
 - mgoのインストール
 - サンプルコード
 
mgoのインストール
おなじみのgo get
% go get -v github.com/globalsign/mgo
おしまい
サンプルコード
hoge.go
package main
import (
	"fmt"
	"log"
	"github.com/globalsign/mgo"
	"github.com/globalsign/mgo/bson"
)
type Person struct {
	ID   bson.ObjectId `bson:"_id"`
	Name string        `bson:"name"`
	Age  int           `bson:"age"`
}
func main() {
	session, _ := mgo.Dial("mongodb://localhost/test")
	defer session.Close()
	db := session.DB("test")
	/**
	 * つくるところ
	**/
	ritsu := &Person{
		ID:   bson.NewObjectId(),
		Name: "田井中律",
		Age:  17,
	}
	col := db.C("people")
	if err := col.Insert(ritsu); err != nil {
		log.Fatalln(err)
	}
	/**
	 * みつけるところ
	**/
	p := new(Person)
	query := db.C("people").Find(bson.M{})
	query.One(&p)
	/**
	 * 結果
	**/
	fmt.Printf("%+v\n", p)
	// &{ID:ObjectIdHex("5478517a9871b9b8e42e2ee2") Name:田井中律 Age:17}
}
おしまいです. コピペしてgo run hoge.goしてみてください.
以下、メモ
importのところ
import (
	"fmt"
	"github.com/globalsign/mgo"
	"github.com/globalsign/mgo/bson"
)
structとmongo的なdocumentとのマッピングについて
type Person struct {
	// encoding/jsonパッケージなどでおなじみの`tag`が使える
	// `bson:"field_name"`で指定したフィールド名で
	// mongodbのドキュメントが保存される
	// また、取り出すときもこのフィールド名に対応したものがマッピングされる
	ID   bson.ObjectId `bson:"_id"`
	Name string        `bson:"name"`
	Age  int           `bson:"age"`
}
参考: http://godoc.org/labix.org/v2/mgo/bson
hostとのコネクションとか
func main() {
	// sessionはコネクションプーリングとかよしなにしてくれる
	session, _ := mgo.Dial("mongodb://localhost/test")
	// お行儀
	defer session.Close()
	// データベース名でDatabaseを取得
	db := session.DB("test")
参考: http://godoc.org/gopkg.in/mgo.v2#Session
Create系のメソッド
	ritsu := &Person{
		ID:   bson.NewObjectId(),
		Name: "田井中律",
		Age:  17,
	}
	// コレクション名でCollectionを取得
	col := db.C("people")
	// Insertメソッドを使う
	col.Insert(ritsu)
参考: http://godoc.org/gopkg.in/mgo.v2#Collection
Find系のメソッド
	// 参照用のstructを用意
	p := new(Person)
	// mongoのコンソールで{}で表現するものは
	// だいたい"bson.M{}"という形式で表現できる
	// bson.M{"created": bson.M{"$lt": time.Now()}} とか
	query := db.C("people").Find(bson.M{})
	// 遅延評価なので、実行されてない。Queryはあとから追加できる
参考: http://godoc.org/gopkg.in/mgo.v2#Query
	// ここでQueryが実行される
	query.One(&p)
おわりです