31/100 Dias de Golang - GORM
Table of Contents
#
GORM
GORM é um ORM para Golang, segundo a documentação “The fantastic ORM library for Golang aims to be developer friendly.” Vamos seguir o quickstart da documentação e criar um exemplo mais nosso.
Instalação do gorm
e sqlite
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
Vamos definir uma struct Livros que no futuro se transformará na nossa tabela do banco de dados.
type Livros struct {
Autor string
Nome string
NumeroDePaginas uint
}
Fazer a conexão com o banco de dados, veja que estamos utilizando o sqlite como banco. Caso seja utilizado outro banco, o import do driver deve ser diferente.
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
Com o comando AutoMigrate, o banco de dados e as tabelas são criadas
db.AutoMigrate(&Livros{})
Vamos adicionar algumas instâncias de Livros agora:
db.Create(&Livros{
Autor: "J.R.R Tolkien",
Nome: "O Hobbit",
NumeroDePaginas: 329,
})
Podemos passar para a função Create
um slice de Livro
:
db.Create(&[]Livros{
{
Autor: "J.R.R Tolkien",
Nome: "O Hobbit",
NumeroDePaginas: 329,
},
{
Autor: "Isaac Asimov",
Nome: "Fundação",
NumeroDePaginas: 320,
},
{
Autor: "George Orwell",
Nome: "1984",
NumeroDePaginas: 416,
},
})
Vamos buscar todos os livros:
var livros []Livros
db.Find(&livros)
for _, livro := range livros {
fmt.Printf("Livro: %s | Autor: %s | Páginas: %d\n",
livro.Nome,
livro.Autor,
livro.NumeroDePaginas,
)
}
Dependendo de quantas vezes você executou o script, verá diferentes saídas desse programa. Veja minha saída:
Livro: O Hobbit | Autor: J.R.R Tolkien | Páginas: 329
Livro: O Senhor dos Anéis: A Sociedade do Anel | Autor: J.R.R Tolkien | Páginas: 576
Livro: A Guerra dos Tronos | Autor: George R.R. Martin | Páginas: 600
Livro: Harry Potter e a Pedra Filosofal | Autor: J.K. Rowling | Páginas: 264
Livro: Duna | Autor: Frank Herbert | Páginas: 680
Livro: O Guia do Mochileiro das Galáxias | Autor: Douglas Adams | Páginas: 208
Livro: Deuses Americanos | Autor: Neil Gaiman | Páginas: 576
Livro: Fundação | Autor: Isaac Asimov | Páginas: 320
Livro: 1984 | Autor: George Orwell | Páginas: 416
Livro: Frankenstein | Autor: Mary Shelley | Páginas: 280
Vamos fazer um consulta com WHERE
, quero todos os livros com mais de 500 páginas.
var livros_500_page []Livros
db.Where("numero_de_paginas >= ?", 500).Find(&livros_500_page)
for _, livro := range livros_500_page {
fmt.Printf("Livro: %s | Autor: %s | Páginas: %d\n",
livro.Nome,
livro.Autor,
livro.NumeroDePaginas,
)
}
Livro: O Senhor dos Anéis: A Sociedade do Anel | Autor: J.R.R Tolkien | Páginas: 576
Livro: A Guerra dos Tronos | Autor: George R.R. Martin | Páginas: 600
Livro: Duna | Autor: Frank Herbert | Páginas: 680