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

go-concurrency-patterns

Безопасно

إتقان أنماط التزامن في Go

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

ابنِ تطبيقات Go متزامنة بثقة. تعلم أنماطاً جاهزة للإنتاج للـ goroutines و channels و worker pools والإغلاق السلس لتجنب ظروف السباق وتسرب الموارد.

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

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

2

Загрузить в Claude

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

3

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

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

Использование «go-concurrency-patterns». أنشئ worker pool مع 3 عمال يعالج وظائف من channel

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

إليك تطبيق worker pool مع 3 عمال يعالج الوظائف بشكل متزامن ويجمع النتائج عبر channel نتائج مع مزامنة مناسبة باستخدام sync.WaitGroup.

Использование «go-concurrency-patterns». أظهر لي كيفية استخدام errgroup لطلبات HTTP متزامنة

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

هذا المثال يوضح golang.org/x/sync/errgroup لجلب عناوين URL متعددة بشكل متزامن حيث يلغي أول خطأ جميع الطلبات المعلقة عبر نشر context.

Использование «go-concurrency-patterns». طبق semaphore للحد من العمليات المتزامنة

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

أقدم نهجين للـ semaphore: استخدام golang.org/x/sync/semaphore.Weighted للـ semaphores الموزونة و semaphore مبني على channel باستخدام struct{} للحد من المعدل البسيط.

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

Безопасно
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
Соответствие спецификации

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

بناء خدمات مصغرة متزامنة

إنشاء خدمات Go قابلة للتوسع مع worker pools تتعامل مع طلبات متعددة بشكل متزامن مع إدارة الموارد بكفاءة

تطبيق أنابيب معالجة البيانات

تصميم أنابيب fan-out/fan-in لمعالجة مجموعات البيانات الكبيرة بشكل متوازٍ مع معالجة أخطاء مناسبة وإلغاء

تصحيح ظروف السباق

تحديد وإصلاح أخطاء التزامن في كود Go الموجود باستخدام أنماط مزامنة مناسبة وأدوات كشف السباق

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

إنشاء worker pool أساسي
أظهر لي كيفية إنشاء worker pool في Go يعالج 100 وظيفة مع 5 عمال متزامنين
تطبيق الإغلاق السلس
اكتب Go server مع إغلاق سلس يتعامل مع إشارات SIGTERM وينتظر اكتمال الطلبات الجارية
بناء أنبوب fan-out
أنشئ أنبوب fan-out/fan-in في Go يعالج العناصر عبر 3 مراحل مع 5 عمال لكل مرحلة
إصلاح تسرب goroutine
راجع كود Go هذا وحدد تسرب goroutine المحتمل، ثم أرني كيفية إصلاحها باستخدام إلغاء context

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

  • استخدم دائماً context.Context للإلغاء والمواعيد النهائية في العمليات المتزامنة
  • أغلق channels فقط من جانب المرسل لتجنب panics
  • فضل channels على mutexes للتواصل بين goroutines
  • استخدم sync.WaitGroup أو errgroup للانتظار حتى اكتمال goroutines

Избегать

  • استخدام time.Sleep للمزامنة بدلاً من البدائيات المناسبة مثل channels أو WaitGroup
  • إغلاق channels من جانب المستقبل مما يسبب panic
  • نسيان التحقق من ctx.Done() مما يؤدي إلى تسرب goroutines
  • مشاركة الذاكرة بين goroutines بدون مزامنة مناسبة

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

ما الفرق بين البرمجة المتزامنة والمتوازية في Go؟
التزامن يتعلق بهيكلة برنامجك للتعامل مع مهام متعددة في نفس الوقت، بينما التوازي يتعلق بتنفيذ مهام متعددة في نفس الوقت على نوى CPU متعددة. الـ goroutines في Go تمكن التصميم المتزامن الذي يمكن لـ Go runtime تنفيذه بشكل متوازٍ.
متى يجب استخدام channels مقابل mutexes؟
استخدم channels عندما تحتاج goroutines إلى التواصل أو التنسيق (مشاركة الذاكرة عن طريق التواصل). استخدم mutexes عندما تحتاج لحماية الحالة المشتركة من الوصول المتزامن (مشاركة الذاكرة عن طريق مشاركة الذاكرة). channels هي بشكل عام أكثر تمازجاً في Go.
كيف أمنع تسرب goroutine؟
قدم دائماً مسار خروج لـ goroutines باستخدام إلغاء context، والتحقق من ctx.Done() في الحلقات، والتأكد من إغلاق channels في النهاية، واستخدام أنماط مثل errgroup التي تتعامل تلقائياً مع التنظيف.
ما الغرض من sync.WaitGroup؟
sync.WaitGroup يسمح لك بالانتظار حتى تنتهي مجموعة من goroutines. تضيف إلى العداد باستخدام Add()، وتنقص باستخدام Done() عندما تكتمل goroutine، وتنتظر باستخدام Wait() حتى يصل العداد إلى صفر.
كيف أكتشف ظروف السباق في كود Go الخاص بي؟
شغّل اختباراتك أو الملف التنفيذي مع مفاعل السباق مفعلاً باستخدام 'go test -race ./...' أو 'go run -race main.go'. يراقب كاشف السباق وصول الذاكرة ويبلغ عن القراءات/الكتابات المتزامنة للذاكرة المشتركة بدون مزامنة.
ما الفرق بين channels المخزنة وغير المخزنة؟
channels غير المخزنة (make(chan T)) تتطلب أن يكون كل من المرسل والمستقبل جاهزين في نفس الوقت، مما يوفر مزامنة. channels المخزنة (make(chan T, n)) تحمل ما يصل إلى n قيمة بدون مستقبل، مما يسمح للمرسلين بالمواصلة حتى تمتلئ المخزن.

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

Автор

sickn33

Лицензия

MIT

Ссылка

main

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