Blog

  Iniciando com Go: MongoDB com mgo

31 Jul 2014

Hoje vou falar como podemos usar o MongoDB, famoso banco de dados não-relacional, em nossas aplicações Go. Para isso vamos usar o pacote mgo, do brasileiro Gustavo Niemeyer. O mgo é um pacote que tem varias funcionalidades legais, como se pode ver no seu site aqui.

Bom, o primeiro passo é baixar o pacode mgo via go get, o qual podemos fazer assim:

1 go get gopkg.in/mgo.v2

Depois de baixado, podemos criar nossa aplicação, que vai poder inserir e buscar dados no mongo. Vamos chamar esse arquivo de book.go. Com o arquivo criado, vamos começar a programar.

1 package main
2 
3 import (
4   "fmt"
5   "gopkg.in/mgo.v2"
6   "gopkg.in/mgo.v2/bson"
7 )

Nessa primeira parte, eu criei o package main e fiz o importe de 3 pacotes: fmt, que possui varias funções legais para formatação, mgo, que o pacote que se comunica com o mongo e o mgo/bson, uma implementação da especificação BSON (binary json) para Go.

Aqui eu defino uma struct Book, que vai conter os atributos da minha collection.

1 type Book struct {
2   Title string
3   Pages string
4 }

Agora vamos a função principal:

1 func main() {
2   session, err := mgo.Dial("localhost:27017")
3   if err != nil {
4       panic(err)
5   }
6   defer session.Close()
7   [...]

Aqui eu defino o endereço e a porta que o mgo vai se conectar com o MongoDB. No meu caso, localhost:27017. Eu recebo 2 variaves de retorno, session, para quando se conectar com sucesso e err. Temos um if, para quando err for diferente de nil, disparar um panic para que defer session.Close() seja executado e feche a conexão com o mongo. Continuando na func main, vamos agora selecionar a collection que vamos trabalhar e inserir alguns dados nela:

1 c := session.DB("test").C("book")
2   err = c.Insert(Book{"GoT", "600"},
3       Book{"Divergent", "456"})
4   if err != nil {
5       panic(err)
6   }

Atribuimos a c a sessão do mongo com a collection book do banco test. Em seguida inserimos 2 livros na collection book e se houver erro guardamos em err e disparamos o panic para fechar a conexão. Se err == nil, vida que segue :D

Vamos finalmente fazer a busca:

1 result := Book{}
2   err = c.Find(bson.M{"title": "GoT"}).One(&result)
3   if err != nil {
4       panic(err)
5   }
6 
7   fmt.Println("Pages:", result.Pages)
8 }

Bom pessoal, era mais ou menos isso que tinha pra mostrar pra vocês! Abraços.

comments powered by Disqus