Pular para o conteúdo principal

victorstein.dev

88/100 Dias de Golang - Bot para discord

# Bot para discord

Vamos criar um bot para discord usando Golang. Quero focar na parte somente de criar as funções para o bot, a parte de configuração dele no discord você pode procurar em outros lugares, vou deixa uma lista aqui:

  1. Como criar um bot para o Discord
  2. Como criar um bot do Discord

A única coisa que você precisa dessa etapa é o token gerado pelo discord. A ideia é fazer dois posts, um mostrando o primeiro comando e outro organizando o projeto e deixando ele mais “profissional”. Nesse primeiro, vamos configurar o projeto, instalar libs e criar um comando ping.

Ler Mais

87/100 Dias de Golang - Migrações de Banco de Dados em Produção com Goose

# Migrações de Banco de Dados em Produção com Goose

No desenvolvimento de aplicações reais, a modelagem do banco de dados não é uma etapa única. À medida que novas funcionalidades são implementadas, o esquema do banco precisa evoluir – e garantir que essa evolução ocorra de forma previsível, segura e versionada é o papel das migrações de bancos de dados. Não lembro exatamente em qual post, mas já utilizamos o db.AutoMigrate do GORM para criar as tabelas, essa ferramenta é muito útile e prática, mas ela não atende bem a demandas de ambientes de produção. É aqui que entram ferramentas dedicadas, como o Goose - Leiam a documentação da biblioteca, ela é muito boa. E a logo é melhor ainda:

Ler Mais

86/100 Dias de Golang - Conceitos de POO

# Conceitos de POO

Como vimos em outros posts, Go não é uma linguagem orientada a objetos. Mas com os recursos disponibilizados pela linguagem, podemos implementar os conceitos de POO.

# Structs em vez de classes

Em linguagens como Java, C++ ou Python, a orientação a objetos gira em torno de classes e objetos. Em Go, não existem classes. Em vez disso, usamos structs, que são tipos compostos. Vamos criar uma struct para representar uma carta de baralho:

Ler Mais

85/100 Dias de Golang - Interfaces Gráficas com Fyne

# Interfaces Gráficas com Fyne

Pesquisando sobre interfaces gráficas em Golang encontrei o Fyne. Fyne é um framework open-source para construção de interfaces gráficas modernas usando a linguagem Go, ele entrega suporte nativo para Windows, Linux, macOS, Android e iOS, layouts responsivos, temas, vários widgets nativos: botões, entradas de texto, caixas de seleção, tabelas e muito mais. Achei legal que eles oferecem uma demo para baixarmos.

go install fyne.io/fyne/v2/cmd/fyne_demo@latest

Rodando a aplicação com:

Ler Mais

84/100 Dias de Golang - Testes de Integração em Go com Testcontainers

# Testes de Integração em Go com Testcontainers

Mockar para simular bancos de dados e integrações com serviços externos é muito útil e muito rápido, mas esses testes não garantem que a aplicação irá funcionar com o serviço real. É nesse contexto que o Testcontainers se faz útil. Com ele podemos gerar testes de integração com as dependências “reais”. Ele funciona da seguinte forma: definimos um container (imagem, portas, envs, …), o testcontainers sobe essa infraestrutura, realizamos os testes e o container é removido no final da execução.

Ler Mais

83/100 Dias de Golang - Criação de gráficos com go-echarts

# Criação de gráficos com go-echarts

Sempre que pensamos em geração de gráficos a primeira solução que vem a cabeça é o Python e sua infinidade de bibliotecas, procurando algumas opções a isso encontrei várias soluções escritas em Go. Temos vários pacotes, alguns abandonados, outros arquivados e os dois que parecem se destacar são: go-echarts e Gonum Plot. Gostei da abordagem do go-echarts e resolvi seguir com ele. Essa lib é um wrapper da biblioteca JavaScript Apache ECharts. Para instalar, podemos criar um projeto e executar:

Ler Mais

82/100 Dias de Golang - Biblioteca lo

# Biblioteca lo

Dando uma explorada no ecossistema de bibliotecas do golang, e encontrei a lo. Ela traz para o Go uma série de funções inspiradas na programação funcional — como Map, Filter, Reduce, GroupBy e FlatMap. Vamos instalar a lib e fazer alguns testes:

go get github.com/samber/lo

Na programação funcional, map é uma função que aplica uma determinada função a cada elemento de uma coleção, no nosso caso aqui um slice, e retorna uma nova coleção contendo os resultados. Aqui vamos fazer o quadrado de cada elemento do slice.

Ler Mais

81/100 Dias de Golang - Reflect

# Reflect

Go é uma linguagem fortemente tipada, mas em alguns tipos de aplicações temos que trabalhar com tipos dinâmicos, exemplo disso é quando usamos um serializador ou ferramentas que inspecionam e manipulam structs no runtime. Para esses casos, a linguagem oferece o pacote reflect. O pacote reflect fornece reflexão de tempo de execução: a capacidade de inspecionar tipos, valores, e até modificar dados dinamicamente. Ele permite:

  1. Verificar o tipo de um valor genérico
  2. Obter campos e tags de structs
  3. Chamar métodos dinamicamente
  4. Modificar valores - Parece perigoso

O reflect gira em torno de dois tipos principais:

Ler Mais

80/100 Dias de Golang - Mini Servidor de CI/CD – Parte 4 - Adicionando testes ao repositório!

# Mini Servidor de CI/CD – Parte 4: Adicionando testes ao repositório!

Finalizamos a implementação da API e a execução dos pipelines. Agora é hora de garantir que tudo isso funcione como esperado com testes automatizados. Para fazer os testes vamos instalar a go get github.com/stretchr/testify e criar nosso arquivo: internal/api/test/handlers_test.go

Vamos iniciar criando um setup para nossos testes. Para isso vamos criar um banco em memória.

func setupTestRouter() *gin.Engine {
	database, _ := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
	db.DB = database
	db.DB.AutoMigrate(&models.Pipeline{}, &models.Step{}, &models.Execution{})

	r := gin.Default()
	api.RegisterRoutes(r)
	return r
}

Primeiro vamos testar a criação de um pipeline. Devemos esperar desse request um retorno de sucesso.

Ler Mais

79/100 Dias de Golang - Mini Servidor de CI/CD – Parte 3 - Implementação da API com Gin

# Mini Servidor de CI/CD – Parte 3: Implementação da API com Gin

Na Parte 2, criamos o banco de dados e modelamos nossas entidades com GORM. Agora, vamos adicionar a camada de API que permitirá: Criar novos pipelines, listar pipelines existentes e executar um pipeline específico. Iremos utilizar o Gin. Teremos dois arquivos novos nessa etapa do projeto o internal/api/routes.go e o internal/api/handlers.go.

No arquivo routes.go, definimos as 3 rotas e quais os handlers de cada rota:

Ler Mais