مقدمة: لماذا التوثيق هو كود
\n\nفي المراحل الأولى من التطوير بلغة Go، غالبًا ما يُنظر إلى التعليقات على أنها إجراء شكلي. ومع ذلك، بالنسبة لمشروع ناضج، يصبح التوثيق عالي الجودة أصلًا بالغ الأهمية. فهو يُسرّع عملية دمج المطورين الجدد، ويُسهّل إعادة الهيكلة، ويُشكّل المصدر الوحيد للحقيقة لمستخدمي API، ويساعد في تجنب الأخطاء. على المستوى المتقدم، تتحول كتابة التوثيق في Go إلى نظام قائم على اتفاقيات صارمة وأدوات وأمثلة.
\n\nفي هذه المقالة، لن نناقش فقط "كيفية كتابة التعليقات"، بل سنتناول كيفية إنشاء توثيق كامل وقابل للصيانة ومفيد لمشروع Go، باستخدام أفضل الممارسات والإمكانيات المتاحة في النظام البيئي.
\n\n1. الهيكلة والأسلوب: من الحزمة إلى الدالة
\n\nتوفر Go أداة مدمجة go doc (سابقًا godoc)، والتي تستخرج التعليقات تلقائيًا من الكود. لكي يكون التوثيق قابلًا للقراءة ومفيدًا، يجب الالتزام بقواعد تنسيق صارمة.
1.1. تعليقات الحزمة
\nيجب أن تحتوي كل حزمة على تعليق حزمة، يوضع مباشرة قبل تعريف package. هذا التعليق هو أول ما يراه المستخدم عند فتح التوثيق. يجب أن يصف الغرض من الحزمة، وإمكانياتها الرئيسية، وإذا لزم الأمر، يقدم روابط لأمثلة الاستخدام.
// Package calculator توفر دوالًا لإجراء العمليات الحسابية الأساسية\n// على الأعداد الصحيحة.\n//\n// تدعم الحزمة الجمع والطرح والضرب والقسمة.\n// يمكن العثور على أمثلة الاستخدام في ملف example_test.go.\npackage calculator\n\n1.2. تعليقات الأنواع والدوال
\nيجب أن تبدأ التعليقات الخاصة بالمُعرّفات المُصدّرة (العامة) باسم المُعرّف نفسه. هذا الاتفاق يجعل التوثيق موثقًا ذاتيًا وواضحًا عند التصفح السريع.
\n\n- \n
- الدوال: تبدأ بـ "FunctionName does/returns...". \n
- الأنواع: تبدأ بـ "TypeName represents/is...". \n
- الثوابت والمتغيرات: تصف مجموعة أو قيمة محددة. \n
// Add ترجع مجموع عددين صحيحين a و b.\nfunc Add(a, b int) int {\n return a + b\n}\n\n// Calculator تمثل هيكلًا لتنفيذ عمليات حسابية متسلسلة.\ntype Calculator struct {\n result int\n}\n\n1.3. تعليقات العناصر غير المُصدّرة
\nبالنسبة للدوال والأنواع الداخلية (الخاصة)، التعليقات ليست إلزامية، لكنها مرغوبة إذا كان المنطق معقدًا. استخدم التعليقات العادية أحادية السطر // لشرح "لماذا"، وليس "ماذا" (لأن "ماذا" واضح من الكود).
2. أمثلة الكود كجزء من التوثيق
\n\nأفضل طريقة لعرض عمل API هي من خلال الأمثلة القابلة للاختبار (Example functions). تقوم Go تلقائيًا بتضمينها في التوثيق الذي يولده go doc، والأهم من ذلك، تتحقق من صحتها عند تشغيل الاختبارات.
2.1. إنشاء دوال Example
\nتوضع الأمثلة في ملفات ذات اللاحقة _test.go. يجب أن يبدأ اسم الدالة بـ Example ويمكن أن يتضمن اسم النوع أو الطريقة للسياق.
// الملف: calculator_test.go\n\npackage calculator\n\nimport "fmt"\n\nfunc ExampleAdd() {\n sum := Add(2, 3)\n fmt.Println(sum)\n // Output: 5\n}\n\nfunc ExampleCalculator_Add() {\n c := Calculator{}\n c.Add(10)\n c.Add(5)\n fmt.Println(c.Result())\n // Output: 15\n}\n\n2.2. تعليقات خاصة في الأمثلة
\nالعنصر الأساسي هو السطر // Output:. تقارن أداة go test المخرجات القياسية للدالة مع النص المتوقع بعد هذا السطر. إذا لم يتطابق المخرَج، يفشل الاختبار. وهذا يضمن أن التوثيق دائمًا محدث ويعمل بشكل صحيح.