Pular para o conteúdo principal

victorstein.dev

33/100 Dias de Golang - make()

# make()

Aproveitando o Dia 32/100 busquei no roadmap.sh sobre os tópicos que já tinha estudado e verifiquei quais pontos ainda não tinha visto ou não sabia do que se tratava. A função make() entra nos assuntos que já vi nos materias que estou usando para estudar, mas pensando com mais profundidade não sei qual a utilidade dela nem quando fazer uso da mesma. Nesse posto pretendo sanar essas dúvidas.

Ler Mais

32/100 Dias de Golang - Caminhos para estudar Golang

# Caminhos para estudar Golang

Não cheguei nem em metade dos 100 dias e estou meio perdido em quais caminhos seguir para estudar. Procurei alguns materiais e encontrei vários caminhos bem interessantes.

# Go | Tech Guide - Alura

Go | Tech Guide - Alura Material muito legal desenvolvido pelo pessoal da Alura. Está dividido em 3 níveis de profundidade.

# Roadmap.sh

Roadmap.sh Caminho bem legal para seguir, passa por todo o básico da linguagem para depois ir para CLI, ORM, Frameworks Web, Logging, WebSockets, API, Testes e Ferramentas para microserviços.

Ler Mais

31/100 Dias de Golang - GORM

# 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.

Ler Mais

30/100 Dias de Golang - Testes - Exemplo Prático

# Testes - Exemplo Prático

Vamos fazer um exemplo completo com o conhecimento que adquirimos até agora sobre testes na linguagem Go. Para esse exemplo vou criar um pacote chamado “stats” com algumas funções estatísticas simples. Usarei também testify que vimos no 29/100 Dias de Golang - Testes com Testify.

Vamos iniciar o projeto:

go mod init stats

E já adicionar as libs necessárias:

go get github.com/stretchr/testify/assert
go get github.com/stretchr/testify/require

Vamos criar um arquivo e adicionar duas funções, média e mediana. Veja que fiz algumas validações se o slice é vazio e criei um erro específico para isso.

Ler Mais

29/100 Dias de Golang - Testes com Testify

# Testes com Testify

Toda a concepção do Go e as escolhas arquiteturais da linguagem são direcionadas para tornar a linguagem simples. Podemos ver isso claramente nos testes:

if total != expected {
	t.Errorf("Esperava %d recebi %d", expected, total)
}

Não temos um assert como em outras linguagens para verificar os valores. Para preencher esse “gap” no coração dos programadores temos a lib Testify. Vamos criar alguns testes com ela, mas antes vamos instalar a lib no nosso projeto:

Ler Mais

28/100 Dias de Golang - Testes em Go com Fuzzing

# Testes em Go com Fuzzing

Já vimos que é muito importante termos testes de integração nos nossos códigos, vimos também sobre cobertura de código e comentamos que mesmo que um código esteja com 100% de cobertura não é garantia que ele esteja correto, lembre da frase do Dijkstra “Os testes mostram a presença, não a ausência de bugs”. É aqui que entra o fuzzing, uma técnica poderosa para encontrar falhas inesperadas no código. Desde a versão 1.18, o Go oferece suporte nativo ao fuzzing, tornando essa abordagem mais acessível para desenvolvedores.

Ler Mais

27/100 Dias de Golang - Testes de benchmark

# Benchmarking em Go: Medindo e Otimizando o desempenho

Como você deve ter visto até aqui, testes em go são muito simples e a biblioteca padrão nos oferece recursos bem poderosos. Outra ferramenta que a biblioteca testing oferece de forma nativa é o benchmarking. O benchmarking serve para diversas finalidades, todas relacionadas à avaliação e otimização do desempenho de sistemas, aplicações, algoritmos ou componentes de software. A questão mais legal que eu achei foi a comparação de implementações, testar qual implementação de uma função performa melhor que outra. Veja como é simples fazer esses testes:

Ler Mais

26/100 Dias de Golang - Testes em batch, AAA e Cobertura de Código

# Testes em batch

Vamos adicionar mais alguns testes na função de soma, agora vamos testar com dois valores negativos, com somente um valor negativo e com zero.

func TestSomaTwoNegatives(t *testing.T) {
	total := Soma(-5, -10)

	expected := -15

	if total != expected {
		t.Errorf("Esperava %d recebi %d", expected, total)
	}
}

func TestSomaOneNegative(t *testing.T) {
	total := Soma(5, -10)

	expected := -5

	if total != expected {
		t.Errorf("Esperava %d recebi %d", expected, total)
	}
}

func TestSomaWithZero(t *testing.T) {
	total := Soma(5, 0)

	expected := 5

	if total != expected {
		t.Errorf("Esperava %d recebi %d", expected, total)
	}
}

O que você achou de todos esses testes? Não parece contraintuitivo gerar uma função para cada caso da função Soma? Só estamos trocando os parâmetros, parece desnecessário repetir toda a estrutura. Para resolver esse problema o Go possui o teste em batch. Veja como fazemos esse teste em batch.

Ler Mais

25/100 Dias de Golang - Testes em Golang

# Testes

Uma das coisas mais interessantes da linguagem é o suporte nativo a testes. Diferente de muitas linguagens que dependem de frameworks externos, o Go já vem pronto para testar! Testes automatizados evitam bugs, documentam o comportamento do código e facilitam refatorações. Esse post será bem introdutório, podemos explorar bem a fundo a questão dos testes, talvez criar um mini biblioteca para usarmos de exemplo.

# Pacote testing

Esse pacote padrão do Go oferece as ferramentas básicas para escrever testes unitários . Para começar vamos criar um arquivo chamado utils.go e colocar uma função bem simples de soma:

Ler Mais

24/100 Dias de Golang - Continuação sobre a biblioteca “time”

# Continuação sobre a biblioteca “time”

​No post “22/100 Dias de Golang - Biblioteca ’time’” , foram abordadas funcionalidades básicas da biblioteca time do Go, como obter o horário atual, acessar componentes individuais da data e formatar datas. Vamos aprofundar esses conceitos e explorar recursos mais avançados da biblioteca

# Fusos Horários

No Go, o pacote time permite converter entre fusos horários utilizando o tipo Location

Ler Mais