Novo new() com expressão inicial no Go 1.26

Neste post, vamos explorar uma mudança pequena, mas poderosa, que chegou no Go 1.26: o built-in new() agora aceita uma expressão como valor inicial. Pode parecer um detalhe, mas simplifica inicializações e abre espaço para padrões de código mais elegantes.

O que é o built-in new()?

O new() é uma função built-in que aloca memória para um tipo e retorna um ponteiro inicializado com o valor zero do tipo. Historicamente, você só podia passar um tipo para new().

Como era antes (Go 1.25 e anteriores)

Antes, se você quisesse alocar memória e inicializar com um valor específico, tinha duas opções:

// Opção 1: alocar e depois atribuir
p := new(int)
*p = 42

// Opção 2: usar composição literal com &
p := &int{42}  // Só funciona com tipos estruturados
Leia mais »

Quality of Service (QoS) no Kubernetes

Quando você coloca uma aplicação em produção no Kubernetes, uma das decisões mais importantes é como especificar os recursos que seus pods precisam. Essa escolha determina qual classe de Quality of Service (QoS) seu pod recebe — e isso impacta diretamente na sua estabilidade e custo. Neste post, vou explicar em detalhe os três níveis de QoS: Guaranteed, Burstable e BestEffort.

O que é QoS no Kubernetes?

QoS (Quality of Service) é um mecanismo que o Kubernetes usa para classificar e priorizar seus pods em relação ao uso de recursos. Quando o nó está sem memória ou CPU disponível, o Kubernetes usa a classe QoS para decidir qual pod será removido (evicted) ou compactado.

O Kubernetes define três classes de QoS:

  • BestEffort — mínima prioridade, primeira a ser removida
  • Burstable — prioridade média, removida após Guaranteed
  • Guaranteed — máxima prioridade, última a ser removida

Qual classe seu pod recebe depende de como você especifica os requests e limits de CPU e memória.

QoS BestEffort: Máxima Flexibilidade, Sem Garantias

Um pod é classificado como BestEffort quando:

  • Você não define requests nem limits de CPU ou memória
  • É a situação padrão quando você simplesmente não especifica nada
Leia mais »

O que é TinyGo?

Neste post, vou explicar o que é TinyGo, por que você deveria conhecer e como começar com um exemplo bem simples. Se você nunca ouviu falar em TinyGo ou simplesmente quer entender esse universo de programação para microcontroladores, esse post é para você.

O que é TinyGo?

TinyGo é um compilador Go otimizado para ambientes com recursos limitados. Enquanto a linguagem Go tradicional foi criada para sistemas desktop, como CLIs, e servidores, como aplicações cloud, o TinyGo permite que você escreva código Go para rodar em microcontroladores e pequenos dispositivos.

A ideia é simples: leve a simplicidade e a elegância do Go para o mundo do IoT (Internet das Coisas) e sistemas embarcados.

Leia mais »

Como escolhemos nosso API Gateway

Nesse post quero compartilhar um pouco da experiência que tive na tomada de decisão técnica na hora de escolher um serviço/plataforma.

O caso que compartilharei aconteceu no segundo semestre de 2024, quando um dos OKRs da Unico era a implementação de um API Gateway.

O que descrevo aqui não é uma prática documentada e seguida à risca em todas as decisões tomadas na Unico, mas sim como fizemos para um caso específico. No entanto, há aprendizados e etapas que podem ser replicados para outros casos.

Passo 1: Qual problema precisamos resolver?

Quando decidimos refatorar toda a borda da empresa, a primeira coisa que fizemos foi entender o que, no modelo atual, não estava como queríamos. Identificamos complexidades, falhas processuais e de padronização na exposição de APIs públicas. Também levantamos alguns desejos que poderiam ser resolvidos na borda, como por exemplo, rate limit.

Com todos esses dados em mãos, para que a entrega não ficasse extremamente complexa (não que tenha sido simples) e, para ser possível ter algum resultado/impacto em menos de 6 meses, definimos algumas etapas para a implementação, onde, por exemplo, deixaríamos a implementação de rate limit para uma segunda fase.

Leia mais »

Nova etapa do blog

Depois de quase 7 meses sem postar nada por aqui, resolvi fazer uma grande mudança! Durante esse tempo, pensei muito sobre o que fazer com o blog. Como estava trabalhando como SRE, meu dia-a-dia era muito mais voltado a infraestrutura do que código Go em si.

Por um instante, pensei inclusive em fechar o blog. Mas sempre que pensava isso, como a vontade de compartilhar continua aqui, resolvi mante-lo aberto, porém sem postar nada.

Foi somente no início desse ano que decidi realmente o que fazer. Ao invés de fechar o blog, decidi torná-lo mais pessoal, por isso que a URL lá em cima não é mais aprendagolang.com.br.

Ainda continuarei compartilhando o sei e novidades que estarei aprendendo sobre Go, ainda mais agora que voltei a trabalhar como software engineer.

No entanto, utilizarei esse espaço para compartilhar muito mais. Só para vocês terem uma ideia do que vem por aí, nos últimos 18 meses trabalhei na implantação de um API Gateway (Apigee), nova geração de clusters Kubernetes e implementação de um multi-region ativo-ativo de ponta a ponta.

Em outras palavras, aprendi MUITA COISA, e vou utilizar esse espaço para compartilhar com vocês.

Sobre as assinaturas, quem tem uma assinatura ativa continuará tendo acesso aos conteúdos normalmente. No entanto, não será mais possível assinar nenhum plano.

Já sobre os cursos, quem adquiriu continuará com acesso normalmente, porém não os venderei mais também.

Isso por que desejo focar esse ano em melhorias na Imersão Aprenda Golang e em workshops ao vivo.

Durante as próximas semanas, muita novidade vai rolar por aqui, inclusive a volta do parcelamento da imersão e uma super promoção em comemoração do meu aniversário 😁.

Espero que compreendam e estejam juntos comigo nessa nova etapa do blog.

Até a próxima.


Faça parte da comunidade!

Receba os melhores conteúdos sobre Go, Kubernetes, arquitetura de software, Cloud e esteja sempre atualizado com as tendências e práticas do mercado.

* indicates required

Livros Recomendados

Abaixo listei alguns dos melhores livros que já li sobre arquitetura de software e desenvolvimento.

Agente autônomos em Go

O termo “agente autônomo” vem ganhando destaque à medida que as necessidades de automação e inteligência se tornam cada vez mais complexas. Basicamente, um agente autônomo é um software projetado para tomar decisões — com ou sem intervenção humana direta — e executar ações de forma independente, reagindo a estímulos do ambiente ou a eventos pré-definidos. Esses agentes podem, por exemplo, monitorar dados em tempo real, interagir com APIs externas, escalar recursos de infraestrutura ou até mesmo negociar ativos em sistemas financeiros.

Mas por que isso é tão relevante hoje em dia? E, mais importante ainda, por que escolher a linguagem Go (Golang) para desenvolver agentes autônomos?

O que são Agentes Autônomos?

Um agente autônomo é um componente de software capaz de perceber seu ambiente, raciocinar sobre essas percepções e agir conforme objetivos definidos, sem depender de comandos manuais a cada nova interação.

Leia mais »

Conheça os packages slices e cmp

Com a evolução da linguagem Go, algumas tarefas antes repetitivas ou trabalhosas ganharam abstrações poderosas e idiomáticas. Os packages slices e cmp, adicionados oficialmente ao ecossistema da linguagem por meio do módulo golang.org/x/exp e posteriormente promovidos ao módulo padrão em versões mais recentes, são dois exemplos reais.

Neste post, vamos explorar como esses dois packages podem simplificar tarefas comuns como ordenações e comparações, trazendo clareza, concisão e segurança ao seu código.

O package slices

O package slices, inicialmente disponível em golang.org/x/exp/slices e depois promovido ao slices, fornece funções genéricas para manipulação de slices de forma mais expressiva e segura. Entre suas funcionalidades estão: busca, ordenação, filtro, comparação, cópia e mais.

Leia mais »

Microserviços eficientes com Go

Microserviços têm se tornado uma das arquiteturas mais populares no desenvolvimento moderno de software, especialmente quando falamos em sistemas escaláveis e de alta performance.

Go se destaca nesse cenário devido à sua simplicidade, velocidade e suporte nativo à concorrência.

Neste post, elenquei uma lista com 10 dicas práticas para garantir uma aplicação eficiente, robusta e escalável.

O que são microserviços?

Microserviços são uma abordagem de desenvolvimento onde um sistema é dividido em pequenos serviços autônomos, cada um responsável por uma função específica.

Leia mais »

Como iterar um map de forma ordenada

Em Go, o tipo map é amplamente utilizado por sua eficiência em acessar valores rapidamente através de chaves. Porém, devido à natureza do tipo map, não há garantia alguma sobre a ordenação das chaves durante uma iteração. Isso pode se tornar um problema quando precisamos de uma ordem específica para nossas operações, como imprimir resultados ordenados ou realizar tarefas onde a ordem é significativa.

Neste post, veremos como o package slice do Go pode nos ajudar a resolver esse problema de forma simples e clara.

Como os map funcionam

Um map no Go é implementado como uma tabela hash, que garante eficiência no acesso a valores através das suas chaves. Porém, por conta dessa implementação, a ordem em que os elementos são retornados em uma iteração não é determinada. Cada iteração pode resultar em uma ordem diferente, e o compilador Go intencionalmente embaralha a ordem das chaves para prevenir que desenvolvedores dependam acidentalmente de uma ordem específica.

Leia mais »

Testes automatizados com GitHub Actions

No desenvolvimento de software moderno, a automação é uma peça-chave para garantir qualidade, eficiência e entrega contínua de valor. Uma das etapas mais importantes do ciclo de vida de uma aplicação é a execução de testes. Quando combinamos testes automatizados com Integração Contínua (CI), conseguimos detectar problemas rapidamente e evitar que bugs cheguem à produção.

Neste post, exploraremos o conceito de CI, a importância de automatizar testes em projetos Go e como configurar um pipeline utilizando o GitHub Actions para executar testes de forma automatizada.

O que é CI?

Integração Contínua (Continuous Integration – CI) é uma prática de desenvolvimento de software que consiste em integrar o código desenvolvido por diferentes membros da equipe de forma contínua em um repositório central. Cada nova mudança no código é automaticamente testada e verificada por meio de pipelines de CI, garantindo que o software continue funcionando como esperado.

Leia mais »