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.