SKILL 148 · AGENT SKILL

Go Concurrency: goroutines com saída, cancelamento e limites

Orienta goroutines, canais, cancelamento, estado compartilhado, worker pools e auditorias com limites e evidências verificáveis.

USE QUANDOEngenharia e revisão de APIs, workers, pipelines, serviços e bibliotecas Go que precisam controlar ciclo de vida, cancelamento, erros e estado compartilhado.
ENTREGARevisão ou diff pequeno com saída de goroutines, propriedade de canais, sincronização, backpressure e limites documentados, sujeito a testes e validação humana.

FONTE PRIMÁRIA

Confira o projeto original.

A imagem é uma ilustração editorial exclusiva. A origem, a licença e as permissões devem ser conferidas no repositório oficial antes da instalação.

Abrir repositório original ↗
Ilustração editorial de fluxos concorrentes atravessando canais, um limite de trabalho e um sinal de cancelamento que bloqueia uma rota perdida
Ilustração editorial exclusiva do Bastidores da IA. Não é captura de tela, interface real, logotipo oficial, benchmark, prova de execução nem garantia de ausência de goroutine leaks.

O QUE ESTA SKILL VERIFICA

O que ela coloca na mesa.

Fixe commit, versão, licença, versão do Go e escopo
Comece em revisão sem escrita e identifique dono e saída de cada goroutine
Autorize separadamente rede, testes de integração e subagentes
Revise o diff e rode testes e detector de corrida em ambiente isolado

DETALHES DA SKILL

Como esta skill funciona na prática.

Entenda a função, o melhor cenário de uso e o resultado que você deve revisar antes de incluir esta skill no seu fluxo de trabalho.

PROBLEMA QUE RESOLVE

Quando ela é útil

Engenharia e revisão de APIs, workers, pipelines, serviços e bibliotecas Go que precisam controlar ciclo de vida, cancelamento, erros e estado compartilhado.

FUNÇÃO PRINCIPAL

O que ela faz

Orienta goroutines, canais, cancelamento, estado compartilhado, worker pools e auditorias com limites e evidências verificáveis.

RESULTADO DA EXECUÇÃO

O que você deve receber

Revisão ou diff pequeno com saída de goroutines, propriedade de canais, sincronização, backpressure e limites documentados, sujeito a testes e validação humana.

AMBIENTE COMPATÍVEL

Onde pode ser usada

Claude Code, Codex e ambientes semelhantes que carreguem Agent Skills em Markdown. Requer projeto Go e binário go; recursos citados variam entre Go 1.19 e Go 1.27.

Limite importante

O uso funcional pode ler e editar código, executar go, golangci-lint e git, abrir rede por testes e dividir auditorias entre agentes. Delimite o projeto, aprove cada efeito, proteja código e perfis e valide tudo localmente.

ANÁLISE EDITORIAL

Concorrência em Go pode deixar um serviço mais responsivo, mas também pode esconder goroutines sem saída, canais fechados pelo lado errado, corridas de dados e trabalho ilimitado. A Skill Go Concurrency transforma esses riscos em perguntas verificáveis: quem é o dono da goroutine, como ela termina, quem fecha cada canal, como o erro cancela tarefas irmãs e qual limite protege CPU, memória e serviços externos.

O material é um guia para agentes que escrevem, revisam ou auditam código Go. Ele não executa monitoramento contínuo, não prova ausência de vazamentos e não substitui testes, revisão humana ou observabilidade em produção. Seu valor está em organizar decisões antes que a concorrência vire um detalhe impossível de rastrear.

Imagem: Ilustração editorial exclusiva do Bastidores da IA sobre fluxos concorrentes atravessando canais, um limite de trabalho e um sinal de cancelamento. Não é captura de tela, interface real, logotipo oficial, benchmark nem prova de execução.

O que esta Skill faz de verdade

O SKILL.md fixado no commit auditado apresenta três modos. No modo de escrita, orienta a implementação de goroutines, canais, primitivas de sincronização, workers e pipelines. No modo de revisão, concentra a análise no diff. No modo de auditoria, permite dividir uma base grande em até cinco frentes, desde que o usuário tenha aprovado o uso de subagentes.

A regra central é exigir uma saída previsível para cada goroutine. A Skill relaciona contexto, canal de encerramento, sync.WaitGroup e errgroup a responsabilidades diferentes. Também compara canal, mutex, atômicos, sync.Map, sync.Once, singleflight e limites de concorrência. Os exemplos detalhados estão nas referências de canais e select, pipelines e worker pools e primitivas de sincronização.

É uma referência de engenharia, não um linter. Ela pode sugerir mudanças e, se o agente tiver escrita e shell autorizados, editar arquivos e executar comandos. A confirmação de correção depende do programa real, da versão do Go, dos testes e do comportamento em carga.

Para quem serve

Serve para pessoas e equipes que mantêm APIs, workers, consumidores de filas, pipelines, CLIs, serviços de rede e bibliotecas em Go. É útil quando uma revisão envolve go func, compartilhamento de mapas, fan-out e fan-in, cancelamento, timeouts, deduplicação de chamadas ou dúvidas entre canais e mutexes.

Não é a melhor ferramenta para um erro isolado de nil, aliasing de slices ou overflow sem relação com concorrência. O próprio projeto encaminha esses casos para skills de segurança. Também não é um depurador de um processo já travado ou em corrida. Para esse cenário, a referência aponta uma skill separada de troubleshooting. Essa separação reduz respostas genéricas e evita aplicar concorrência a um problema que deveria continuar síncrono.

Compatibilidade e pré-requisitos

A compatibilidade declarada cobre Claude Code, Codex e ambientes semelhantes que carreguem Agent Skills em Markdown. O projeto analisado precisa usar Go, e o host deve fornecer o binário go. O cabeçalho autoriza leitura, edição, escrita, busca e comandos restritos a go, golangci-lint e git, além de perguntas ao usuário e agentes auxiliares.

A Skill cita recursos de várias versões. Atômicos tipados exigem Go 1.19 ou superior, funções como OnceValue chegaram no Go 1.21 e WaitGroup.Go no Go 1.25. O perfil goroutineleak é apresentado como disponível sem flag no Go 1.27. Consulte as notas oficiais do Go 1.27 e a documentação de WaitGroup.Go antes de aceitar uma sugestão incompatível com o go.mod.

O uso completo também pode depender de golangci-lint, go.uber.org/goleak ou golang.org/x/sync. O ZIP do Bastidores não instala essas dependências. Ele entrega somente a Skill, três referências, licença e registro de origem.

Instalação recomendada

O README oficial fixado documenta o Skills CLI. Para instalar apenas este item no escopo do projeto, revise primeiro o repositório e use:

npx skills add https://github.com/samber/cc-skills-golang --skill golang-concurrency

O comando consulta a rede, executa um pacote via npx e grava arquivos de skill. Confirme a origem do pacote, a pasta de destino e o diff. Quem preferir o caminho documentado para Codex pode clonar o repositório em ~/.agents/skills/cc-skills-golang, mas isso baixa o catálogo completo. Como o README avisa que as skills são unidades atômicas com referências cruzadas, instalar somente uma oferece uma visão parcial das convenções.

Para máxima reprodutibilidade, fixe o commit 22c58a55a0a799b901aa251172923180bad9e010 em uma cópia revisada. Não faça atualização automática em um projeto sensível. Compare a nova versão com a aprovada e revalide permissões.

Configuração antes do primeiro uso

Defina o modo: escrita, revisão ou auditoria. Em revisão, entregue um diff delimitado. Em auditoria, informe repositório, módulos, diretórios excluídos e se o uso de até cinco subagentes está autorizado. Em escrita, descreva requisito funcional, limites de carga, política de timeout, propagação de erro e ambiente de teste.

Confira go.mod, versão do compilador e dependências existentes. Uma recomendação moderna pode falhar em uma base presa a Go anterior. Registre ainda quais comandos podem rodar. O cabeçalho autoriza git, mas isso não significa autorização para commit, push, troca de branch ou descarte de alterações. Mantenha o repositório limpo ou preserve mudanças não relacionadas.

Classifique os dados. Testes de integração podem abrir rede, acessar banco, filas ou credenciais do ambiente. Use fixtures, serviços descartáveis e segredos fora de prompts e logs. Para produção, comece em leitura e observação. Não permita que uma auditoria altere limites, reinicie serviços ou exponha perfis sem aprovação.

Primeiro uso seguro

Escolha um pacote pequeno e peça revisão sem escrita. Solicite uma tabela com local, risco, evidência e correção proposta. A primeira verificação deve responder: como cada goroutine sai, se o chamador pode cancelar, se existe espera pelo encerramento, quem possui o canal e se a concorrência é realmente necessária.

Depois, valide manualmente os pontos citados e execute testes locais. O detector de corridas oficial documenta o uso do sinalizador -race:

go test ./...
go test -race ./...

O segundo comando é mais caro e só encontra corridas exercitadas pela execução. Uma passagem limpa não prova que toda sincronização está correta. Se houver benchmark ou teste de carga, rode em ambiente controlado, com limite de duração e sem credenciais de produção. Revise qualquer edição antes de mantê-la.

Como o fluxo deve funcionar

  1. Localizar os pontos que iniciam goroutines e identificar o proprietário de cada ciclo de vida.
  2. Mapear canais, direção, fechamento, buffer e caminhos de bloqueio.
  3. Confirmar cancelamento por contexto nos select de longa duração.
  4. Examinar estado compartilhado, seções críticas, I/O sob lock e escolha entre mutex e canal.
  5. Limitar fan-out, worker pools e chamadas externas com uma política explícita.
  6. Propagar o primeiro erro e cancelar trabalho irmão quando esse for o contrato.
  7. Adicionar testes de encerramento, corrida e carga proporcional ao risco.
  8. Entregar evidências, incertezas e um diff pequeno para revisão humana.

O artigo oficial sobre pipelines e cancelamento mostra por que produtores precisam parar quando consumidores deixam de ler. Já o pacote errgroup oferece propagação de erro, contexto e limite de concorrência. A escolha deve seguir o contrato, não uma preferência automática por abstrações.

Resultado esperado

Uma revisão útil identifica riscos reproduzíveis, aponta o trecho responsável e propõe a menor mudança segura. Para cada goroutine, o relatório deve explicar entrada, saída, cancelamento e espera. Para cada canal, deve registrar quem envia, quem recebe e quem fecha. Para estado compartilhado, precisa justificar a primitiva e o alcance do lock.

Uma implementação bem-sucedida mantém o comportamento exigido, passa pelos testes relevantes e torna os limites explícitos. Não aceite frases como “agora está livre de leaks” sem teste de encerramento, observação de goroutines e cenário de cancelamento. O perfil oficial de goroutine leaks acrescenta um sinal para produção no Go 1.27, mas continua sendo evidência complementar, não certificado de correção.

Permissões, privacidade e riscos

A Skill pode ler todos os arquivos Go alcançados pelo escopo, editar código e executar compilação, testes, linter e comandos Git. Isso pode revelar nomes internos, regras de negócio, endpoints e mensagens de erro ao provedor do agente. Restrinja o projeto e evite bases de clientes sem autorização e política de retenção adequadas.

Comandos de teste podem consumir CPU e memória, iniciar containers, abrir rede ou modificar bancos se a suíte não estiver isolada. golangci-lint pode baixar componentes, e dependências Go podem ser consultadas na rede. Um agente auxiliar recebe parte do código e do contexto. Ative paralelismo apenas quando a base justificar e o usuário tiver concordado.

Perfis pprof também merecem cuidado. Um endpoint exposto pode revelar pilhas, caminhos, nomes de funções e comportamento interno. Colete somente no ambiente autorizado, proteja o acesso e remova artefatos sensíveis após a análise. Nunca publique um perfil real junto com o ZIP documental.

Erros comuns

  • Criar goroutine sem dono: toda execução precisa de saída, cancelamento e forma de espera.
  • Fechar no receptor: o remetente normalmente possui e fecha o canal.
  • Usar buffer para esconder bloqueio: capacidade maior adia pressão sem corrigir o contrato.
  • Esquecer ctx.Done(): loops e selects podem sobreviver ao chamador.
  • Disparar sem limite: fan-out ilimitado esgota processo e serviços dependentes.
  • Executar I/O sob mutex: a seção crítica fica imprevisível e amplia contenção.
  • Compartilhar ponteiro por canal: a mutação volta a ser estado compartilhado invisível.
  • Chamar wg.Add tarde: versões antigas exigem Add antes de iniciar a goroutine.
  • Usar API de versão nova: confira o go.mod antes de aceitar WaitGroup.Go.
  • Tratar -race como prova total: ele observa apenas caminhos exercitados.
  • Rodar auditoria paralela sem consentimento: subagentes ampliam processamento e exposição.
  • Confundir o ZIP com ferramenta executável: o arquivo local contém somente documentação.

Versão, licença e origem verificadas

Em 06/09/2026, o repositório samber/cc-skills-golang estava público, não arquivado, declarava licença MIT e registrava 3.182 estrelas. A curadoria fixou o HEAD 22c58a55a0a799b901aa251172923180bad9e010. O último commit específico do SKILL.md era 8f8e2feb661bfecbba2b7a3f03a5fbad573073f9.

A versão declarada no cabeçalho é 1.2.1. A licença MIT permite a redistribuição com preservação do aviso. Repositório, commit, versão e contagem de estrelas são campos separados porque mudam em ritmos diferentes.

O pacote local contém seis arquivos textuais: SKILL.md, três referências Markdown, LICENSE e ORIGEM.md. Não contém as demais skills do repositório, scripts, binários, módulos Go, dependências, testes, perfis, código do usuário, credenciais ou segredos. O ZIP tem 14.110 bytes e SHA-256 80fc09eb9379eabd1713346b0ee8cffcbd7ea9a9cc18f477bb8208823ac14be7.

Checklist antes de automatizar

  • Fixe o commit, confirme a licença e leia os seis arquivos do pacote.
  • Escolha escrita, revisão ou auditoria e delimite diretórios e módulos.
  • Confira a versão do Go e as APIs aceitas pelo projeto.
  • Mantenha alterações do usuário e trabalhe com diff pequeno.
  • Autorize separadamente rede, dependências, testes de integração e subagentes.
  • Valide saída, cancelamento, espera, propriedade de canais e limites.
  • Rode testes e detector de corrida em ambiente isolado e proporcional ao risco.
  • Proteja código, perfis, logs, endpoints e dados de clientes.
  • Não faça commit, push ou mudança em produção por inferência.
  • Registre evidências e limitações antes de afirmar correção.

O download do Bastidores serve para auditoria documental. Compare-o com a pasta oficial fixada. Se optar pelo catálogo completo, revise também as referências cruzadas e habilite somente o que o projeto precisa.

Fontes primárias

CONFIGURAÇÃO

Instale só depois de ler.

Abra a fonte oficial, leia README e licença, fixe uma versão ou commit e só então siga o método indicado pelo mantenedor. Não execute comandos copiados de comentários ou vídeos sem revisão.

Skills CLI por projetonpx skills add https://github.com/samber/cc-skills-golang --skill golang-concurrency

O comando consulta a rede, executa um pacote via npx e grava arquivos. Revise origem e destino, instale no projeto de teste e confira o diff; a Skill isolada oferece visão parcial das convenções cruzadas.

01 · CONFIRME A ORIGEM

Abra a fonte e o README

  1. Confira mantenedor e nome do repositório.
  2. Leia licença, requisitos e permissões.
  3. Escolha uma versão ou commit para aprovar.
02 · INSTALE COM ESCOPO

Comece em um projeto de teste

  1. Use o comando acima ou o método do README.
  2. Prefira instalação por projeto antes da global.
  3. Não copie tokens, chaves ou arquivos sensíveis.
Instalação oficial fixada ↗
03 · VALIDE O RESULTADO

Faça um teste pequeno

  1. Confirme a descrição e os arquivos instalados.
  2. Execute uma tarefa reversível.
  3. Registre versão aprovada e remova o que não usar.
SKILL.md auditado ↗
← Voltar para todas as skills