Entenda o Context Timeout e Cancelation

context foi introduzido aos packages padrão da linguagem para simplificar a gestão de deadlines, timeouts e cancelamentos em operações assíncronas, tento então um papel fundamental na construção de aplicações eficientes e resilientes.

Por isso, compreender profundamente como utilizar contextos com timeout e cancelamento pode ser um diferencial significativo na sua carreira como desenvolvedor Go.

Neste post, faremos um deep dive nas funcionalidades de timeout e cancelamento do context. Vamos explorar o propósito desse package, seus principais conceitos e, mais importante, como aplicá-los de forma eficaz no dia a dia.

O que é Context

O package context foi projetado para ajudar os desenvolvedores a gerenciar o ciclo de vida de operações que podem ser canceladas ou que precisam respeitar um tempo limite. Isso é especialmente útil em aplicações web, serviços distribuídos e sistemas concorrentes, onde é comum lidar com chamadas que podem demorar muito tempo ou que podem ser interrompidas por diversas razões.

A ideia principal por trás do context é fornecer uma maneira de transportar informações de controle — como deadlines, timeouts, sinais de cancelamento e valores contextuais — ao longo das funções e goroutines. Isso evita a necessidade de criar variáveis globais ou passar informações manualmente entre funções.

Leia mais »

O que é e como usar o Go Modules

Se você já desenvolve em Go, provavelmente já ouviu falar em Go Modules. Introduzido oficialmente no Go 1.11 e aprimorado nas versões subsequentes, os Go Modules mudaram a maneira como gerenciamos dependências e organizamos projetos.

Neste post, vamos explorar o que são Go Modules, porque eles são importantes e como utilizá-los de forma eficiente em seus projetos.

O que são Go Modules?

Go Modules é a maneira oficial de gerenciar dependências em projetos Go. Antes de sua introdução, o Go utilizava o conceito de GOPATH para organizar o código, o que trazia várias limitações, como a necessidade de manter todo o código dentro de uma estrutura específica de diretórios e a dificuldade em gerenciar diferentes versões de bibliotecas.

Com os Go Modules, você pode:

  • Trabalhar fora do GOPATH.
  • Especificar versões de dependências.
  • Garantir reprodutibilidade nos builds.
  • Facilitar o gerenciamento de projetos grandes e com muitas dependências.
Leia mais »

Introdução ao package Viper

A configuração de uma aplicação é um dos pilares essenciais para garantir flexibilidade e adaptabilidade em diferentes ambientes de execução, como desenvolvimento, teste e produção.

Em Go, gerenciar essas configurações pode ser um desafio, especialmente quando lidamos com múltiplas fontes, como arquivos, variáveis de ambiente e flags de linha de comando.

É aqui que entra o Viper, um package poderoso para gerenciamento de configuração que simplifica esse processo.

O que é o Viper?

O Viper é um package open source desenvolvido para ajudar desenvolvedores Go a gerenciar configurações de maneira eficiente e flexível. Ele permite que sua aplicação leia configurações de várias fontes, como:

  • Arquivos de configuração (YAML, JSON, TOML, HCL, etc.)
  • Variáveis de ambiente
  • Flags de linha de comando
  • Key-value stores (como Consul)
  • Configurações remotas
Leia mais »

Como integrar uma aplicação com Kubernetes

O Kubernetes se tornou uma ferramenta fundamental para a orquestração de contêineres em ambientes modernos de desenvolvimento.

Um dos recursos mais importantes dentro do Kubernetes é o Secrets, que permite o armazenamento seguro de informações sensíveis como credenciais de acesso, certificados e chaves de API.

No entanto, acessar e manipular esses dados diretamente pelo Kubernetes pode ser um desafio, especialmente quando se trata de automatização e integração com aplicações Go.

Neste post, exploraremos como utilizar o client-go para acessar e gerenciar Secrets diretamente a partir de um CLI escrito em Go.

O que é o recurso Secrets?

Secrets são recursos do Kubernetes usados para armazenar e gerenciar informações sensíveis, como senhas, tokens de autenticação e certificados. Diferente de ConfigMaps, os Secrets são tratados de maneira mais segura, sendo armazenados em formato base64 e criptografados no etcd (banco de dados do Kubernetes).

Leia mais »
Código Idiomático

Como Escrever Código Idiomático em Go

Se você está aprendendo Go ou já tem experiência com a linguagem, provavelmente já ouviu falar sobre “código idiomático”. Mas o que realmente significa escrever código idiomático em Go? Por que isso é importante e como podemos identificar boas práticas que seguem esse princípio?

Neste post, vamos explorar o conceito de código idiomático. Além disso, veremos exemplos práticos que mostram a diferença entre código idiomático e código que não segue as melhores práticas.

O que é código idiomático?

Em termos simples, código idiomático é aquele que segue as práticas e convenções estabelecidas da linguagem, utilizando seus recursos de maneira eficaz, clara e intuitiva.

Mas, mais do que isso, escrever código idiomático em Go significa escrever código que:

Leia mais »

Introdução ao WebAssembly em Go

Nos últimos anos, o desenvolvimento web tem passado por transformações significativas, e uma das tecnologias que mais tem despertado o interesse de desenvolvedores é o WebAssembly (Wasm).

Originalmente projetado para ser executado em navegadores, o Wasm se tornou uma tecnologia promissora também para ambientes de backend. Mas como o WebAssembly se relaciona com o Go? E por que você deveria se importar?

Antes de responder essas perguntas, vamos explorar um pouco melhor do que é WebAssembly e onde essa tecnologia pode ser aplicada.

O que é WebAssembly?

WebAssembly é um formato binário que pode ser executado em diversos ambientes, como navegadores, servidores e dispositivos de IoT. Em linhas gerais, um ambiente Wasm oferece uma maneira de rodar código de baixo nível de maneira segura e eficiente, independentemente da linguagem de programação utilizada para criar o binário.

Leia mais »

Como gerar PDFs

Os PDFs são amplamente utilizados para compartilhar documentos de maneira consistente e confiável. Seja para gerar relatórios, faturas ou certificados, criar PDFs programaticamente é uma necessidade comum em muitas aplicações modernas.

O vasto universo open source de packages Go oferece várias bibliotecas para manipulação de PDFs. Um dos mais populares é o gopdf, que fornece uma API intuitiva para criar PDFs sem a necessidade de packages externos pesados ou dependência de outros softwares instalados no sistema.

Neste post, você aprenderá como usar o gopdf para criar, personalizar e exportar PDFs em Go. Vamos explorar desde um exemplo simples até recursos mais avançados, como adicionar imagens e tabelas, além de exportar PDFs via HTTP.

O package gopdf

O gopdf é um package poderoso e leve para gerar PDFs em Go. Projetado para ser simples e eficiente, ele oferece uma variedade de funcionalidades:

Leia mais »

Memory leaks em maps

Continuando nossa série de posts sobre garbage collector e memory leaks em Go, neste post exploraremos o que são maps e como acontecem seus memory leaks.

Antes de ler esse post, convido a ler os posts anteriores da série:

O que são maps

Map é uma estrutura chave-valor não ordenada, altamente eficientes e que baseia na estrutura de dados hash table. Internamente, uma hash table nada mais é do que um array de buckets, onde cada bucket é um ponteiro para um array chave-valor.

Cada array chave-valor tem um tamanho fixo de 8 elementos. Quando esse array está cheio (bucket overflow), um novo array de 8 elementos é criado e “linkado” ao array anterior.

Leia mais »

gonew: Como criar projetos a partir de templates

Ouvindo aos pedidos da comunidade, mesmo que não incorporado oficialmente ao CLI do Go ainda, o time de desenvolvimento da linguagem Go criou um novo programa capaz de ajudar a iniciar novos projetos. Seu nome, pelo menos por enquanto, gonew.

Como dito no parágrafo anterior, a finalidade desse novo programa é auxiliar na criação de novos projetos Go. Com ele, podemos utilizar um repositório template como base para novas aplicações.

Sem mais delongas, vamos meter a mão na massa, ou melhor, no teclado.

Instalação

Para conseguir utilizar esse novo programa, precisamos tê-lo instalado. A forma mais fácil, já que você muito provavelmente tem o Go instalado na sua máquina, é utilizar o comando go install.

go install golang.org/x/tools/cmd/gonew@latest
Leia mais »

O que é e como utilizar protocol buffers

Protocol buffers, protobuf ou simplesmente proto, é uma linguagem criada pela Google para serialização de dados. Para facilitar o entendimento, podemos comparar o protobuf com XML ou JSON. No entanto, dados serializados com proto, são MUITO menores quando comparados com as outras duas tecnologias.

Outro ponto importante é que, após escrever um arquivo proto, utilizamos um programa chamado protoc para gerar código em Go, Java, Python, C#, C, C++, entre outras linguagens. Código esse que contém todas as classes e métodos que estiverem declarados dentro dos arquivos proto.

Mas calma! Antes de falar mais sobre esse código gerado, vamos entender o que compõe e como criar um arquivo proto.

Syntax

A primeira coisa que precisamos fazer em um arquivo proto é definir sua syntax. Essa syntax nada mais é do que a versão do protobuf que iremos utilizar.

Leia mais »