تخطَّ إلى المحتوى

🐹 مرجع Go بالعربي

كل كلمة مفتاحية ودالة مدمجة ودالة قياسية في Go بالعربي: ماذا تفعل، صياغتها، مثال يوضّحها، وأشهر الأخطاء — لغة مُترجَمة فلا يوجد تشغيل حي في المتصفح. حاليًا 34 عنصر — والقائمة تكبر.

أساسيات اللغة

الدوال المدمجة

المكتبة القياسية

context.WithTimeout

مهلة زمنية لعملية

context.WithTimeout تشتق من context أب مهلةً زمنية نسبية — تُلغى القناة Done تلقائيًا عند انقضاء المدة أو عند استدعاء cancel يدويًا، أيّهما أسبق.

os.ReadFile

قراءة ملف كامل دفعة واحدة

os.ReadFile يقرأ محتوى ملف كاملًا من مساره ويعيده كشريحة بايتات — أبسط طريقة لقراءة ملف صغير أو متوسّط الحجم في Go.

strings.Split

تقسيم نص لأجزاء

strings.Split يقسّم نصًّا لشريحة من الأجزاء بناءً على فاصل محدَّد، مع سلوك خاص عند غياب الفاصل أو كونه فارغًا.

ServeMux Patterns

أنماط توجيه الميثود والمسار في ServeMux

منذ Go 1.22، تدعم أنماط http.ServeMux مطابقة الميثود والـ wildcards داخل النمط نفسه، فتنتهي الحاجة لفحص r.Method أو تقطيع المسار يدويًا.

Request.PathValue

قراءة قيمة wildcard من المسار

PathValue تُرجع قيمة الجزء المطابق لـ wildcard بنمط ServeMux المسجَّل، بدل استخراجها يدويًا من r.URL.Path بتقطيع النص.

slices.Collect

تجميع تكرار داخل شريحة جديدة

slices.Collect يأخذ iter.Seq[V] ويجمع كل القيم الناتجة عنه داخل شريحة []V جديدة — الجسر بين عالم التكرارات الكسولة والشرائح العادية.

slices.Sorted

تجميع تكرار وفرزه دفعة واحدة

slices.Sorted يجمع قيم iter.Seq[E] داخل شريحة جديدة ثم يفرزها مباشرة — اختصار عملي بديل لاستخراج المفاتيح يدويًا ثم استدعاء sort.

os.Root

وصول لنظام الملفات محصور بمجلّد

os.Root يمنح وصولًا لنظام الملفات محصورًا داخل شجرة مجلّد واحد فقط — أي مسار يحاول الهروب منها، حتى عبر رابط رمزي symlink، يفشل بخطأ بدل الوصول لملف خارج الحدود المقصودة.

weak.Pointer

مؤشّر ضعيف لا يمنع تحرير الذاكرة

weak.Pointer يشير لقيمة دون منع جامع القمامة من تحريرها — مفيد لبناء ذواكر تخزين مؤقّت (caches) لا تُبقي كائنات حيّة بالذاكرة لمجرّد وجودها بالكاش.

synctest.Test

تشغيل اختبار داخل فقاعة زمن وهمي

synctest.Test يشغّل دالة اختبار داخل فقاعة (bubble) بساعة وهمية تتقدّم فورًا لا بالوقت الحقيقي — فيصبح اختبار كود يستخدم time.Sleep أو مُهلًا زمنية سريعًا وحتميًّا بدل بطيء وغير مستقرّ.

synctest.Wait

الانتظار حتى تتوقّف كل الـ goroutines داخل الفقاعة

synctest.Wait تحجب حتى تصل كل goroutine أخرى داخل نفس الفقاعة لحالة حجب دائم — أداة تزامن صريحة داخل اختبارات synctest بدل انتظارات تخمينية أو Sleep قصير.

jsonv2.Marshal

تحويل قيمة إلى JSON (النسخة الثانية)

jsonv2.Marshal من حزمة encoding/json/v2 الجديدة (منذ Go 1.27) تحوّل قيمة Go إلى JSON بنفس فكرة json.Marshal القديمة، لكن بقواعد أدقّ وخيارات Options اختيارية — الحزمة القديمة تبقى مدعومة بالكامل.

jsonv2.Unmarshal

تحويل JSON إلى قيمة (النسخة الثانية)

jsonv2.Unmarshal من encoding/json/v2 تقرأ JSON لقيمة Go بقواعد أدقّ من النسخة الأولى: ترفض UTF-8 غير صالح وترفض تكرار نفس المفتاح بدل تجاهلهما بصمت، وأداؤها أسرع ملحوظًا.

uuid.New / uuid.NewV7

توليد UUID جديد

الحزمة القياسية الجديدة uuid (منذ Go 1.27) تولّد UUID بلا مكتبة خارجية — uuid.New لأي غرض عام (نسخة v4 عشوائية)، و uuid.NewV7 لمعرّف مرتّب زمنيًا يناسب مفاتيح قواعد البيانات.

uuid.Parse

تحليل نص UUID

uuid.Parse من الحزمة القياسية uuid تحوّل نصًّا يمثّل UUID (بأي صيغة شائعة: بشرطات، بأقواس، أو urn:uuid:) إلى قيمة UUID، مع error واضح عند فشل التحليل.

bytes.CutLast

تقطيع بايتات عند آخر ظهور لفاصل

bytes.CutLast (منذ Go 1.27) تقطّع شريحة بايتات عند آخر ظهور لفاصل محدَّد، معاكسة لـ bytes.Cut التي تقطع عند أول ظهور — تبسّط حالات شائعة كانت تحتاج LastIndex يدويًا.

strings.CutLast

تقطيع نص عند آخر ظهور لفاصل

strings.CutLast (منذ Go 1.27) تقطّع نصًّا عند آخر ظهور لفاصل محدَّد — معاكسة لـ strings.Cut التي تقطع عند أول ظهور، وتختصر حالات كانت تحتاج LastIndex يدويًا.

runtime/pprof goroutineleak

اكتشاف goroutines متسرّبة للأبد

ملف تعقّب goroutineleak بحزمة runtime/pprof (تجريبي منذ Go 1.26، جاهز للإنتاج منذ Go 1.27) يكتشف goroutines عالقة للأبد على قناة أو Mutex لن يتحرّر أبدًا — يعتمد على قابلية الوصول (reachability) لا مجرّد مهلة زمنية.

ميزات حديثة

range over func (iter.Seq)

المرور على دالة تكرارية مخصّصة

منذ Go 1.23، range تقبل دالة تطابق توقيع iter.Seq[V] مباشرة، فتصبح كتابة تكرارات (iterators) مخصّصة قابلة للاستخدام بنفس صيغة range العادية.

iter.Seq2

تكرار بأزواج قيم (مفتاح وقيمة)

iter.Seq2[K, V] نفس فكرة iter.Seq لكن بزوج قيم لكل خطوة — الصيغة التي تستخدمها maps.All وslices.All لإرجاع مفتاح أو فهرس مع القيمة معًا.

Generic Type Alias

أليس نوع بمعامل عام

منذ Go 1.24، يمكن لأليس نوع (type alias) أن يحمل معامل نوع خاصًّا به مثل نوع معرَّف عادي — اسم مختصر لنوع عام متكرّر دون إنشاء نوع منفصل جديد.

new(expr)

مؤشّر لقيمة مهيَّأة بخطوة واحدة

منذ Go 1.26، new تقبل تعبيرًا (قيمة) لا نوعًا فقط — فتخصّص متغيّرًا مهيَّأً بتلك القيمة مباشرة وتعيد مؤشّره، بخطوة واحدة بدل متغيّر مؤقّت ثم أخذ عنوانه بـ &.

func (T) M[P any](...)

method يعلن معامل نوع خاص به

منذ Go 1.27، method مفرد يقدر يعلن معامل نوع خاص به بين اسمه وقائمة معاملاته — حتى لو النوع الذي ينتمي إليه غير عام أصلًا، بلا حاجة لتحويل النوع كله لنوع عام.

Struct{Field: v}

مفتاح struct literal لحقل مُرقّى

منذ Go 1.27، مفتاح عنصر بـ struct literal يقبل أي field selector صالح — يشمل حقلًا مُرقًّى (promoted) من نوع مُضمَّن مباشرة، لا اسم حقل مباشر بالنوع فقط كما كان سابقًا.

أدوات ووحدات Go

🎓 تريد التعلم بالترتيب بدل المرجع السريع؟ ابدأ من مسار GO الكامل بالعربي.