الكتاب الأساسي

مواضيع أخرى متعلقة بـ Go

تركّز مقالات Go 101 بشكل أساسي على الصياغة (syntax) والدلالات (semantics) في Go. وهناك بعض المواضيع الأخرى المتعلقة بـ Go التي لا تغطيها Go 101. سيقدّم باقي هذا المقال تعريفات بسيطة بهذه المواضيع ويوفّر بعض روابط الويب للقرّاء للتعمّق فيها أكثر.

التنميط (Profiling) وقياسات الأداء (Benchmarks) واختبارات الوحدة/الضبابية (Fuzzing)

يمكننا استخدام الأمر go test في سلسلة أدوات Go لتشغيل الاختبارات وقياسات الأداء. يجب أن تنتهي أسماء ملفات شيفرة الاختبار بـ _test.go. تدعم سلسلة أدوات Go أيضًا تنميط برامج Go. يُرجى قراءة المقالات التالية لمزيد من التفاصيل.

gccgo

gccgo هو مصرِّف Go آخر يتولّاه الفريق الأساسي لـ Go. يُستخدم بشكل أساسي للتحقّق من صحة مصرِّف Go القياسي (gc). يمكننا استخدام خيار البناء -compiler=gccgo في عدة أوامر من سلسلة أدوات Go لاستخدام مصرِّف gccgo بدلًا من المصرِّف gc. على سبيل المثال، go run -compiler=gccgo main.go. يتطلّب هذا الخيار أن يكون برنامج gccgo مثبَّتًا. وبمجرد تثبيت برنامج gccgo، يمكننا أيضًا استخدام الأمر gccgo مباشرةً لتصريف شيفرة Go.

حزم go/* القياسية

توفّر حزم go/* القياسية وظائف تحليل ملفات Go المصدرية، وهي مفيدة جدًا لكتابة أدوات Go مخصّصة. يُرجى قراءة go/types: مدقّق أنواع Go وتوثيق الحزمة لمعرفة كيفية استخدام هذه الحزم.

استدعاءات النظام

يمكننا إجراء استدعاءات النظام عبر استدعاء الدوال المصدَّرة من الحزمة القياسية syscall. يُرجى الانتباه إلى أنه، بخلاف الحزم القياسية الأخرى، تعتمد الدوال في الحزمة القياسية syscall على نظام التشغيل.

لغة تجميع Go

يمكن تنفيذ دوال Go بلغة تجميع Go. لغة تجميع Go هي لغة تجميع متعددة المعماريات (وإن لم تكن بنسبة 100%). غالبًا ما تُستخدم لغة تجميع Go لتنفيذ بعض الدوال الحاسمة لأداء تنفيذ برامج Go.

لمزيد من التفاصيل، يُرجى متابعة الروابط التالية.

cgo

يمكننا استدعاء شيفرة C من شيفرة Go، والعكس صحيح، عبر آلية cgo. يُرجى متابعة الروابط التالية للتفاصيل.

من الممكن استخدام مكتبات C++ عبر cgo بتغليف مكتبات C++ كدوال C.

يُرجى ملاحظة أن استخدام cgo في الشيفرة قد يجعل الحفاظ على التوافقية عبر المنصّات لبرامج Go أمرًا صعبًا، وأن الاستدعاءات بين شيفرة Go وشيفرة C أقل كفاءة إلى حد ما من الاستدعاءات بين Go-Go وبين C-C.

التصريف عبر المنصّات

يدعم مصرِّف Go القياسي التصريف عبر المنصّات. فبضبط متغيّري البيئة GOOS وGOARCH قبل تشغيل الأمر go build، يمكننا بناء ملف تنفيذي لـ Windows على جهاز Linux، والعكس صحيح. يُرجى قراءة المقالات التالية للتفاصيل.

على وجه الخصوص، بدأت سلسلة أدوات Go منذ Go 1.11 في دعم WebAssembly كنوع جديد من GOARCH. يُرجى قراءة مقال الويكي هذا للتفاصيل.

توجيهات المصرِّف

يدعم مصرِّف Go القياسي عدة توجيهات للمصرِّف. يظهر التوجيه كسطر تعليق مثل //go:DirectiveName args. على سبيل المثال، يمكننا استخدام توجيه go:generate لتوليد الشيفرة، واستخدام توجيه go:embed (المُقدَّم في Go 1.16) لتضمين بعض ملفات البيانات في الشيفرة.

قيود البناء (الوسوم)

يمكننا استخدام قيود البناء لجعل المصرِّفات تبني ملفات مصدرية بشكل انتقائي (أي تتجاهل بعض الملفات المصدرية). يُسمّى قيد البناء أيضًا وسم بناء. يمكن أن يظهر قيد البناء كسطر تعليق مثل // +build constraints أو أن يظهر كلاحقة في الاسم الأساسي لملف مصدري. يُرجى ملاحظة: التوجيه الجديد //go:build المُقدَّم في Go 1.17 سيتخلّص في النهاية من أسطر القيود القديمة // +build.

أنماط بناء إضافية

يدعم الأمر go build في سلسلة أدوات Go عدة أنماط بناء. يُرجى تشغيل go help buildmode لعرض أنماط البناء المتاحة أو قراءة الشروح الخاصة بـ خيار -buildmode بدلًا من ذلك. باستثناء نمط البناء الافتراضي، قد يكون نمط بناء الإضافة (plugin) هو الأكثر استخدامًا. يمكننا استخدام الدوال في الحزمة القياسية plugin لتحميل ملفات إضافات Go الناتجة عن استخدام نمط بناء الإضافة واستخدامها.