Pular para o conteúdo principal

victorstein.dev

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