技能 go-concurrency-patterns
📦

go-concurrency-patterns

安全

Domina los patrones de concurrencia en Go

也可从以下获取: wshobson

Construye aplicaciones concurrentes en Go con confianza. Aprende patrones listos para producción para goroutines, canales, pools de workers y apagado gradual para evitar condiciones de carrera y fugas de recursos.

支持: Claude Codex Code(CC)
🥉 75 青铜
1

下载技能 ZIP

2

在 Claude 中上传

前往 设置 → 功能 → 技能 → 上传技能

3

开启并开始使用

测试它

正在使用“go-concurrency-patterns”。 Crear un worker pool con 3 workers que procese trabajos desde un canal

预期结果:

Aquí hay una implementación de worker pool con 3 workers que procesa trabajos concurrentemente y recolecta resultados a través de un canal de resultados con sincronización adecuada usando sync.WaitGroup.

正在使用“go-concurrency-patterns”。 Muéstrame cómo usar errgroup para solicitudes HTTP concurrentes

预期结果:

Este ejemplo demuestra golang.org/x/sync/errgroup para obtener múltiples URLs concurrentemente donde el primer error cancela todas las solicitudes pendientes a través de propagación de contexto.

正在使用“go-concurrency-patterns”。 Implementar un semáforo para limitar operaciones concurrentes

预期结果:

Proporciono dos enfoques de semáforo: usando golang.org/x/sync/semaphore.Weighted para semáforos con peso y un semáforo basado en canales con struct{} para limitación simple de tasa.

安全审计

安全
v1 • 2/25/2026

All 44 static analysis findings are false positives from markdown-enclosed Go code examples. The skill contains legitimate educational content about Go concurrency patterns with no executable code or security risks.

2
已扫描文件
691
分析行数
0
发现项
1
审计总数
未发现安全问题
审计者: claude

质量评分

38
架构
100
可维护性
87
内容
50
社区
100
安全
100
规范符合性

你能构建什么

Construir microservicios concurrentes

Crea servicios Go escalables con worker pools que manejan múltiples solicitudes concurrentemente mientras gestionan recursos eficientemente

Implementar pipelines de procesamiento de datos

Diseña pipelines fan-out/fan-in para procesar grandes conjuntos de datos en paralelo con manejo adecuado de errores y cancelación

Depurar condiciones de carrera

Identifica y corrige bugs de concurrencia en código Go existente usando patrones de sincronización adecuados y herramientas de detección de carreras

试试这些提示

Crear un worker pool básico
Muéstrame cómo crear un worker pool en Go que procese 100 trabajos con 5 workers concurrentes
Implementar apagado gradual
Escribe un servidor Go con apagado gradual que maneje señales SIGTERM y espere a que las solicitudes en curso se completen
Construir un pipeline fan-out
Crea un pipeline fan-out/fan-in en Go que procese elementos a través de 3 etapas con 5 workers por etapa
Corregir fugas de goroutines
Revisa este código Go e identifica posibles fugas de goroutines, luego muéstrame cómo corregirlas usando cancelación de contexto

最佳实践

  • Usar siempre context.Context para cancelación y deadlines en operaciones concurrentes
  • Cerrar canales solo desde el lado del emisor para evitar panics
  • Preferir canales sobre mutexes para comunicación entre goroutines
  • Usar sync.WaitGroup o errgroup para esperar la finalización de goroutines

避免

  • Usar time.Sleep para sincronización en lugar de primitivas adecuadas como canales o WaitGroup
  • Cerrar canales desde el lado del receptor lo que causa panic
  • Olvidar verificar ctx.Done() lo que lleva a fugas de goroutines
  • Compartir memoria entre goroutines sin sincronización adecuada

常见问题

¿Cuál es la diferencia entre programación concurrente y paralela en Go?
La concurrencia trata sobre estructurar tu programa para manejar múltiples tareas simultáneamente, mientras que el paralelismo trata sobre ejecutar múltiples tareas al mismo tiempo en múltiples núcleos de CPU. Las goroutines de Go permiten diseño concurrente que el runtime de Go puede ejecutar en paralelo.
¿Cuándo debo usar canales versus mutexes?
Usa canales cuando las goroutines necesitan comunicarse o coordinarse (compartir memoria comunicándose). Usa mutexes cuando necesitas proteger estado compartido de acceso concurrente (compartir memoria compartiendo memoria). Los canales son generalmente más idiomáticos en Go.
¿Cómo prevengo fugas de goroutines?
Siempre proporciona una ruta de salida para goroutines usando cancelación de contexto, verificando ctx.Done() en bucles, asegurando que los canales se cierren eventualmente, y usando patrones como errgroup que manejan automáticamente la limpieza.
¿Cuál es el propósito de sync.WaitGroup?
sync.WaitGroup te permite esperar a que un conjunto de goroutines termine. Agregas al contador con Add(), decrementas con Done() cuando una goroutine se completa, y bloqueas con Wait() hasta que el contador llega a cero.
¿Cómo detecto condiciones de carrera en mi código Go?
Ejecuta tus tests o binario con el detector de carreras habilitado usando 'go test -race ./...' o 'go run -race main.go'. El detector de carreras monitorea acceso a memoria y reporta lecturas/escrituras concurrentes a memoria compartida sin sincronización.
¿Cuál es la diferencia entre canales con y sin buffer?
Los canales sin buffer (make(chan T)) requieren que emisor y receptor estén listos simultáneamente, proporcionando sincronización. Los canales con buffer (make(chan T, n)) contienen hasta n valores sin un receptor, permitiendo a los emisores proceder hasta que el buffer esté lleno.