مشاكل التزامن التي تراها بانتظام في Go Code؟

منشور قصير ، قيمته الرئيسية ستكون التعليقات (آمل).

لقد تحولت إلى Go مؤخرًا. لقد لاحظت حتى الآن ثلاث مشاكل:

  • time.Ticker لا يتوقف: تخطي الخط defer tick.Stop()

  • يقول التعليق على نوع المكتبة أنها "آمنة في نفس الوقت" ، لكنها لا تذكر بالضبط كيف يمكن استدعاء الأساليب أو من أي goroutines. يمكن اعتبار الإعداد الافتراضي "يمكن استدعاء أي طريقة من أي نوع من أي مكان في أي تسلسل" ، ولكن من الناحية العملية ، ليس هذا هو الحال بالنسبة لمعظم الأنواع الآمنة للخيط: إما أن يكون لديهم دورة حياة (بدء - توقف) ، أو أن الدلالات تدعم كاتب واحد فقط: التحور يمكن استدعاء الطرق من goroutine واحد فقط أو كليهما.

  • النقطة مرتبطة وتتداخل جزئيًا مع النقطة السابقة: يوجد حقل في الهيكل sync.Mutex، ولكن لا يوجد تعليق يشرح ما يحميها ، والأهم من ذلك لماذا (على سبيل المثال ، "يجب حماية الوصول إلى هذه الحقول ، لأنها مكتوبة من غوروتين كذا وكذا وقراءتها من goroutines net/httpالخادم ").



    لاحظ أنه حتى في مصدر golang / go ، والذي لا يتم التعليق عليه عادةً (باستثناء الوثائق الوثائقية) ، تحتوي جميع عناصر المزامنة في الحزم الفرعية net/على تعليقات قصيرة.

سؤال للأشخاص الذين كانوا يكتبون في Go long - ما هي المشكلات التي تلاحظها بانتظام ، أثناء المراجعات ، أو الخوض في الشفرة القديمة ، أو رمز المكتبات؟



هذا المنشور عبارة عن ترجمة متقاطعة من منشور على Reddit .




All Articles