جولة Go التفاعلية بالعربي › التزامن 7 / 7 السابق التالي

القنوات

القنوات

القنوات ممرات ذات نوع محدد يمكنك إرسال القيم واستقبالها عبرها باستخدام عامل القناة، <-.

ch <- v    // Send v to channel ch.
v := <-ch  // Receive from ch, and
           // assign value to v.

(تتدفق البيانات في اتجاه السهم.)

مثل الخرائط والشرائح، يجب إنشاء القنوات قبل استخدامها:

ch := make(chan int)

افتراضيًا، تتوقف عمليات الإرسال والاستقبال انتظارًا حتى يصبح الطرف الآخر جاهزًا. يتيح ذلك لمسارات التنفيذ الخفيفة أن تتزامن دون أقفال صريحة أو متغيرات شرطية.

تجمع الشيفرة في المثال الأعداد الموجودة في شريحة، وتوزّع العمل بين مسارَي تنفيذ خفيفين. وبمجرد أن يُكمل كلا مسارَي التنفيذ الخفيفين حساباته، تحسب النتيجة النهائية.

النص الأصلي بالإنجليزية

Channels

Channels are a typed conduit through which you can send and receive values with the channel operator, <-.

ch <- v    // Send v to channel ch.
v := <-ch  // Receive from ch, and
           // assign value to v.

(The data flows in the direction of the arrow.)

Like maps and slices, channels must be created before use:

ch := make(chan int)

By default, sends and receives block until the other side is ready. This allows goroutines to synchronize without explicit locks or condition variables.

The example code sums the numbers in a slice, distributing the work between two goroutines. Once both goroutines have completed their computation, it calculates the final result.

هذا الدرس للقراءة فقط؛ جرّب المثال في الدرس التالي.

استعادة المثال الأصلي؟

ستُحذف تعديلاتك على شيفرة هذا الدرس، ويعود المثال كما ورد في الكتاب. لا يتغيّر اختيارك لمحرك التشغيل.