go-concurrency-patterns
Ajuda seu agente a usar recursos avançados de concorrência em Go. Ele permite criar programas mais rápidos e eficientes, lidando com múltiplas tarefas ao mesmo tempo.
O que ela faz
Esta ferramenta ajuda a entender e usar as formas avançadas de fazer várias tarefas ao mesmo tempo em um programa de computador escrito na linguagem Go. Ela ensina a usar 'goroutines' (pequenas tarefas que rodam juntas) e 'channels' (canais de comunicação entre essas tarefas).
Quando usar
- ✓Ao criar programas Go que precisam fazer várias coisas ao mesmo tempo.
- ✓Ao organizar tarefas para que trabalhem juntas de forma eficiente (como em 'worker pools').
- ✓Ao tentar descobrir por que seu programa está travando ou dando erros de concorrência.
Exemplo do que pedir para a IA
“Como posso fazer duas partes do meu programa Go rodarem ao mesmo tempo e trocarem informações de forma segura?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ela explica os blocos de construção básicos da concorrência em Go, como 'goroutines' e 'channels', e mostra exemplos de como usá-los para comunicação e sincronização.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add wshobson/agents --skill go-concurrency-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/systems-programming/skills/go-concurrency-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões de Concorrência em Go
Padrões de produção para concorrência em Go, incluindo goroutines, canais, primitivas de sincronização e gerenciamento de contexto.
Quando Usar Esta Habilidade
- Construir aplicações Go concorrentes
- Implementar pools de workers e pipelines
- Gerenciar ciclos de vida de goroutines
- Usar canais para comunicação
- Depurar condições de corrida (race conditions)
- Implementar desligamento gracioso (graceful shutdown)
Conceitos Principais
1. Primitivas de Concorrência em Go
| Primitiva | Propósito |
|---|---|
goroutine |
Execução concorrente leve |
channel |
Comunicação entre goroutines |
select |
Multiplexação de operações de canal |
sync.Mutex |
Exclusão mútua |
sync.WaitGroup |
Esperar goroutines completarem |
context.Context |
Cancelamento e prazos (deadlines) |
2. Mantra de Concorrência em Go
Don't communicate by sharing memory;
share memory by communicating.
Início Rápido
package main
import (
"context"
"fmt"
"sync"
"time"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
results := make(chan string, 10)
var wg sync.WaitGroup
// Spawn workers
for i := 0; i < 3; i++ {
wg.Add(1)
go worker(ctx, i, results, &wg)
}
// Close results when done
go func() {
wg.Wait()
close(results)
}()
// Collect results
for result := range results {
fmt.Println(result)
}
}
func worker(ctx context.Context, id int, results chan<- string, wg *sync.WaitGroup) {
defer wg.Done()
select {
case <-ctx.Done():
return
case results <- fmt.Sprintf("Worker %d done", id):
}
}
Padrões detalhados e exemplos práticos
A documentação detalhada dos padrões está em references/details.md. Leia este arquivo quando o nível de navegação acima for insuficiente.
Melhores Práticas
O Que Fazer (Do's)
- Use
context- Para cancelamento e prazos (deadlines) - Feche canais - Apenas do lado do remetente (sender)
- Use
errgroup- Para operações concorrentes com erros - Bufferize canais - Quando você souber a contagem
- Prefira canais - Em vez de mutexes, quando possível
O Que Não Fazer (Don'ts)
- Não vaze goroutines - Sempre tenha um caminho de saída
- Não feche do receptor - Causa pânico (panic)
- Não use memória compartilhada - A menos que seja necessário
- Não ignore o cancelamento do contexto - Verifique
ctx.Done() - Não use
time.Sleeppara sincronização - Use primitivas adequadas
Perguntas frequentes
O que é uma 'goroutine'?
É como uma função que pode rodar ao mesmo tempo que outras partes do seu programa, sem atrapalhar.
Para que servem os 'channels'?
São como tubos por onde as 'goroutines' podem enviar e receber mensagens umas das outras, de forma segura.
O que significa 'não comunicar compartilhando memória, mas compartilhar memória comunicando'?
É um conselho para evitar que várias partes do programa mexam nos mesmos dados ao mesmo tempo (o que pode causar erros). Em vez disso, use os 'channels' para passar os dados de um lado para o outro.
Detalhes
Descrição original do autor
Master Go concurrency with goroutines, channels, sync primitives, and context. Use when building concurrent Go applications, implementing worker pools, or debugging race conditions.
repo: wshobson/agents
Popularidade
- Estrelas no GitHub
- 41 mil
- Posição no ranking
- #4965
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
screen-reader-testing
Faz seu agente testar sites usando leitores de tela para garantir que sejam acessíveis.
wshobson/agents
wcag-audit-patterns
Ajuda seu agente a auditar sites para acessibilidade e corrigir problemas de acordo com as diretrizes WCAG.
wshobson/agents
multi-reviewer-patterns
Faz seu agente coordenar revisões de código paralelas, deduplicando achados e consolidando relatórios.
wshobson/agents
parallel-debugging
Permite ao agente depurar problemas complexos com investigações paralelas e análise de causa raiz.
wshobson/agents
Skills parecidas
benchmark-optimization-loop
Faz seu agente melhorar a velocidade de algo de forma medida. Ele testa várias versões e escolhe a mais rápida que ainda funciona corretamente.
affaan-m/ECC
change-impact
Ajuda seu agente a analisar o impacto de mudanças no código antes de fazê-las. Ele compara o planejado com o real depois, cobrindo caminhos, dados, testes e documentação. É útil para mudanças arriscadas ou que afetam várias partes do sistema.
affaan-m/ECC
click-path-audit
Faz seu agente rastrear todos os botões e interações do usuário para achar bugs. Ele encontra problemas onde funções parecem funcionar sozinhas, mas falham juntas. Útil quando bugs persistem mesmo após depuração.
affaan-m/ECC