Навыки go-concurrency-patterns
📦

go-concurrency-patterns

Безопасно

Meistern Sie Go-Concurrency-Muster

Также доступно от: wshobson

Erstellen Sie mit Zuversicht nebenläufige Go-Anwendungen. Lernen Sie produktionsreife Muster für Goroutines, Channels, Worker-Pools und graceful Shutdown, um Race Conditions und Ressourcenlecks zu vermeiden.

Поддерживает: Claude Codex Code(CC)
🥉 72 Бронза
1

Скачать ZIP навыка

2

Загрузить в Claude

Перейдите в Settings → Capabilities → Skills → Upload skill

3

Включите и начните использовать

Протестировать

Использование «go-concurrency-patterns». Erstelle einen Worker-Pool mit 3 Workern, der Jobs von einem Channel verarbeitet

Ожидаемый результат:

Hier ist eine Worker-Pool-Implementierung mit 3 Workern, die Jobs nebenläufig verarbeitet und Ergebnisse über einen Results-Channel sammelt, mit korrekter Synchronisation mithilfe von sync.WaitGroup.

Использование «go-concurrency-patterns». Zeige mir, wie man errgroup für nebenläufige HTTP-Anfragen verwendet

Ожидаемый результат:

Dieses Beispiel demonstriert golang.org/x/sync/errgroup, um mehrere URLs gleichzeitig abzurufen, wobei der erste Fehler alle ausstehenden Anfragen durch Context-Propagation abbricht.

Использование «go-concurrency-patterns». Implementiere einen Semaphore zur Begrenzung gleichzeitiger Operationen

Ожидаемый результат:

Ich stelle zwei Semaphore-Ansätze vor: golang.org/x/sync/semaphore.Weighted für gewichtete Semaphoren und einen channel-basierten struct{}-Semaphor für einfaches Rate-Limiting.

Аудит безопасности

Безопасно
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
Контент
32
Сообщество
100
Безопасность
100
Соответствие спецификации

Что вы можете построить

Nebenläufige Microservices entwickeln

Erstellen Sie skalierbare Go-Dienste mit Worker-Pools, die mehrere Anfragen gleichzeitig verarbeiten und dabei Ressourcen effizient verwalten

Datenverarbeitungspipelines implementieren

Entwerfen Sie Fan-out/Fan-in-Pipelines zur parallelen Verarbeitung großer Datensätze mit ordnungsgemäßer Fehlerbehandlung und Cancellation

Race Conditions debuggen

Identifizieren und beheben Sie Concurrency-Fehler in vorhandenem Go-Code mit geeigneten Synchronisationsmustern und Race-Detection-Tools

Попробуйте эти промпты

Einen einfachen Worker-Pool erstellen
Zeige mir, wie man in Go einen Worker-Pool erstellt, der 100 Jobs mit 5 gleichzeitigen Workern verarbeitet
Graceful Shutdown implementieren
Schreibe einen Go-Server mit Graceful Shutdown, der SIGTERM-Signale verarbeitet und darauf wartet, dass laufende Anfragen abgeschlossen werden
Eine Fan-out-Pipeline bauen
Erstelle eine Fan-out/Fan-in-Pipeline in Go, die Elemente durch 3 Stufen mit jeweils 5 Workern pro Stufe verarbeitet
Goroutine-Leaks beheben
Überprüfe diesen Go-Code und identifiziere potenzielle Goroutine-Leaks, zeige mir dann, wie man sie mit Context-Cancellation behebt

Лучшие практики

  • Verwenden Sie immer context.Context für Cancellation und Deadlines bei nebenläufigen Operationen
  • Schließen Sie Channels nur von der Sender-Seite, um Panics zu vermeiden
  • Bevorzugen Sie Channels gegenüber Mutexes für die Kommunikation zwischen Goroutines
  • Verwenden Sie sync.WaitGroup oder errgroup, um auf den Abschluss von Goroutines zu warten

Избегать

  • Verwendung von time.Sleep für Synchronisation anstelle geeigneter Primitiven wie Channels oder WaitGroup
  • Schließen von Channels von der Empfänger-Seite, was zu Panics führt
  • Vergessen, ctx.Done() zu prüfen, was zu Goroutine-Leaks führt
  • Gemeinsame Nutzung von Speicher zwischen Goroutines ohne ordnungsgemäße Synchronisation

Часто задаваемые вопросы

Was ist der Unterschied zwischen nebenläufiger und paralleler Programmierung in Go?
Concurrency betrifft die Strukturierung Ihres Programms zur gleichzeitigen Bearbeitung mehrerer Aufgaben, während Parallelität die tatsächliche Ausführung mehrerer Aufgaben zur gleichen Zeit auf mehreren CPU-Kernen bezeichnet. Gos Goroutines ermöglichen nebenläufiges Design, das die Go-Runtime parallel ausführen kann.
Wann sollte ich Channels gegenüber Mutexes verwenden?
Verwenden Sie Channels, wenn Goroutines kommunizieren oder sich koordinieren müssen (Sharing Memory by Communicating). Verwenden Sie Mutexes, wenn Sie gemeinsamen Zustand vor nebenläufigem Zugriff schützen müssen (Sharing Memory by Sharing Memory). Channels sind in Go im Allgemeinen idiomatischer.
Wie verhindere ich Goroutine-Leaks?
Stellen Sie stets einen Exit-Pfad für Goroutines bereit, indem Sie Context-Cancellation verwenden, ctx.Done() in Schleifen prüfen, sicherstellen, dass Channels irgendwann geschlossen werden, und Muster wie errgroup verwenden, die Cleanup automatisch handhaben.
Welchen Zweck erfüllt sync.WaitGroup?
sync.WaitGroup ermöglicht es Ihnen, auf den Abschluss einer Sammlung von Goroutines zu warten. Sie erhöhen den Counter mit Add(), verringern ihn mit Done(), wenn eine Goroutine abschließt, und blockieren mit Wait(), bis der Counter Null erreicht.
Wie erkenne ich Race Conditions in meinem Go-Code?
Führen Sie Ihre Tests oder Binärdateien mit aktiviertem Race-Detector aus, indem Sie 'go test -race ./...' oder 'go run -race main.go' verwenden. Der Race-Detector überwahrt den Speicherzugriff und meldet gleichzeitige Lese-/Schreibzugriffe auf gemeinsamen Speicher ohne Synchronisation.
Was ist der Unterschied zwischen gepufferten und ungepufferten Channels?
Ungepufferte Channels (make(chan T)) erfordern, dass sowohl Sender als auch Empfänger gleichzeitig bereit sind, und bieten Synchronisation. Gepufferte Channels (make(chan T, n)) können bis zu n Werte ohne Empfänger halten, sodass Sender fortfahren können, bis der Puffer voll ist.

Сведения для разработчиков

Автор

sickn33

Лицензия

MIT

Ссылка

main

Структура файлов