Pular para o conteúdo
Skillpedia
Código em geral41 mil · #4965

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

https://github.com/wshobson/agents/blob/main/plugins/systems-programming/skills/go-concurrency-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/wshobson/agents/blob/main/plugins/systems-programming/skills/go-concurrency-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/systems-programming/skills/go-concurrency-patterns/SKILL.md -o SKILL.md
Conteú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.Sleep para 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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas