Categoria

Golang

Cross-compilation: binários para qualquer plataforma
Golang 05/05/2026

Cross-compilation: binários para qualquer plataforma

Cross-compilation é a capacidade de gerar binários executáveis para um sistema operacional e arquitetura diferentes da máquina onde o código está sendo compilado. Em muitas linguagens, isso exige configurações complexas, toolchains específicas e bibliotecas compiladas para cada alvo. Em Go, essa tarefa é surpreendentemente simples e nativa.

Declaração de variáveis: var, := e constantes
Golang 05/05/2026

Declaração de variáveis: var, := e constantes

Em Go, a forma mais tradicional de declarar variáveis é usando a palavra-chave var. A sintaxe básica coloca o tipo após o nome da variável, diferentemente de linguagens como C ou Java:

Concorrência com o pacote io
Golang 05/05/2026

Concorrência com o pacote io

O modelo de concorrência de Go, baseado em goroutines e canais, é particularmente poderoso quando combinado com operações de I/O. O pacote io fornece interfaces fundamentais como Reader e Writer que são naturalmente compatíveis com esse modelo.

Configuração com viper: env, flags e arquivos
Golang 05/05/2026

Configuração com viper: env, flags e arquivos

Aplicações modernas em Go exigem flexibilidade na obtenção de configurações. Usar variáveis de ambiente brutas com os.Getenv ou flags simples com o pacote flag rapidamente se torna insustentável à medida que o número de parâmetros cresce. É aí que entra o Viper, a biblioteca de configuração mais popular do ecossistema Go.

Constraints e interfaces genéricas
Golang 05/05/2026

Constraints e interfaces genéricas

Constraints em Go são mecanismos que definem quais tipos podem ser utilizados como argumentos de tipo em funções e tipos genéricos. Elas surgiram no Go 1.18 para resolver a necessidade de escrever código genérico sem sacrificar a segurança de tipos.

Context: propagando cancelamento e deadlines
Golang 05/05/2026

Context: propagando cancelamento e deadlines

Antes da introdução do pacote context na biblioteca padrão do Go, o gerenciamento de concorrência era feito manualmente com canais e variáveis compartilhadas. Isso gerava código propenso a vazamentos de goroutines e difícil de manter. Por exemplo, para cancelar uma operação concorrente, era comum usar um canal done como sinalizador:

Controle de fluxo: if, else e inicialização inline
Golang 05/05/2026

Controle de fluxo: if, else e inicialização inline

Em Go, a estrutura condicional if segue uma sintaxe limpa e direta, sem os parênteses obrigatórios encontrados em linguagens como C, Java ou JavaScript. As chaves, no entanto, são obrigatórias — mesmo para blocos de uma única linha.

Channels com buffer
Golang 05/05/2026

Channels com buffer

Channels com buffer em Golang são canais que possuem uma capacidade interna de armazenamento, permitindo que dados sejam enviados sem que haja um receptor imediato. Diferentemente dos channels sem buffer, onde o envio bloqueia até que outra goroutine receba o dado, os channels com buffer oferecem um espaço temporário para armazenar mensagens.

Channels: comunicando goroutines com segurança
Golang 05/05/2026

Channels: comunicando goroutines com segurança

Quando trabalhamos com concorrência em Go, um dos maiores desafios é coordenar o acesso a dados compartilhados entre múltiplas goroutines. Sem uma estratégia adequada, somos rapidamente confrontados com condições de corrida (race conditions), onde o resultado da execução depende da ordem imprevisível de acesso concorrente.