كيفية استخدام بيان التحديد في Golang؟

Kyfyt Astkhdam Byan Althdyd Fy Golang



أ حدد البيان في Golang تمكن المطورين من المزامنة والتواصل بين إجراءات Go والقنوات وتدفقات البيانات. يسمح لبرنامج Go بالانتظار في عمليات متعددة القنوات في وقت واحد وتنفيذ أول عملية جاهزة.

في هذه المقالة ، سوف نستكشف كيفية الاستخدام حدد البيان في Golang وتقديم أمثلة لمساعدتك في تحقيق التوازي والتزامن والمزامنة في برامج Go.

كيفية استخدام بيان التحديد في Golang؟

على غرار بيان التبديل ، فإن حدد البيان يسمح لنا بتحديد وتنفيذ تعبير واحد من بين العديد من التعبيرات ، ولكن الاختلاف الأساسي بينهما يختار والتبديل هو أن حدد البيان يعمل على مبدأ الانتظار ، مما يعني أن ملف حدد البيان لن يتم تنفيذ حتى اكتمال الاتصال.







هنا ، يشير الاتصال إلى إرسال واستقبال البيانات عبر أي قناة معينة. عند اكتمال الاتصال ، يتم إجراء الفحص التالي ، مما يسمح لنا برؤية أن عبارة اختيار لغة Go تعتمد كليًا على القناة.



بناء الجملة لبيان التحديد

الصيغة البسيطة المستخدمة لملف حدد البيان استخدام لغة Go موضحة أدناه:



يختار {
قضية قناة 1 :
// كود للتنفيذ عندما تكون channel_1 جاهزة
قضية القناة_2 :
// كود للتنفيذ عندما تكون channel_2 جاهزة
قضية القناة_3 :
// كود للتنفيذ عندما تكون channel_3 جاهزة
قضية القناة_4 :
// كود للتنفيذ عندما تكون channel_4 جاهزة
تقصير :
// كود للتنفيذ إذا لم تكن أي من القنوات جاهزة
}

هنا:





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

كيفية إنشاء قناة في Golang

لإنشاء قناة في Go ، يمكن للمستخدمين استخدام وظيفة make متبوعة بامتداد تشان الكلمة الأساسية وتحديد نوع القناة ، والتي يمكن أن تكون int أو string أو غيرها.

الفصل : = يصنع ( نوع تشان )

تنفيذ بيان التحديد في Golang

هنا ، سوف نقدم عدة أمثلة لمساعدتك على تعلم أساسيات استخدام حدد البيان في جولانج.



مثال 1

المثال التالي لملف حدد البيان يوضح كيفية أدائه عندما تكون كلتا القناتين جاهزين للتنفيذ.

الحزمة الرئيسية

يستورد 'FMT'

func الرئيسي ( ) {

على واحد : = يصنع ( تشان int )

شارع : = يصنع ( سلسلة تشان )

اذهب chan_num ( على واحد )

اذهب chan_str ( شارع )

يختار {

قضية الفصل 1 : = <- على واحد :

FMT. Println ( 'بيانات القناة:' و الفصل 1 )

قضية الفصل 2 : = <- شارع :

FMT. Println ( 'بيانات القناة:' و الفصل 2 )

}

}

func chan_num ( الأسطوانات تشان int ) {

على واحد <- 67

}

func chan_str ( سلسلة تشان str ) {

شارع <- 'Linux'

}

في المثال أعلاه ، أنشأنا قناتين ، على واحد، و شارع واستخدمنا وظائف Go chan_num () لإرسال البيانات إلى قناة الأسطوانات و chan_str () لإرسال البيانات إلى قناة str. نظرًا لأن البرنامج يحتوي على قناتين مختلفتين ، فقد استخدمنا ملف حدد البيان لتنفيذ واحد منهم.

قضية الفصل 1 يقرأ القيمة من قناة الأسطوانات ويعرضها. وبالمثل ، حالة الفصل 2 إرجاع القيمة من شارع قناة. يقوم البرنامج أعلاه بإرجاع إخراج القناة الجاهزة للاستخدام. انتاج |

مثال 2

إذا كنت تريد إضافة تأخير إلى قناة وإعادة إخراج قناة أخرى ، فيمكنك استخدام وقت النوم() تعمل على قناة محددة. يتيح لك ذلك طباعة إخراج القناة الأخرى إلى وحدة التحكم. إليك مثال على مثل هذه الحالة.

الحزمة الرئيسية

يستورد (

'FMT'

'وقت'

)

func الرئيسي ( ) {

على واحد : = يصنع ( تشان int )

شارع : = يصنع ( سلسلة تشان )

اذهب chan_num ( على واحد )

اذهب chan_str ( شارع )

يختار {

قضية الفصل 1 : = <- على واحد :

FMT. Println ( 'بيانات القناة:' و الفصل 1 )

قضية الفصل 2 : = <- شارع :

FMT. Println ( 'بيانات القناة:' و الفصل 2 )

}

}

func chan_num ( الأسطوانات تشان int ) {

على واحد <- 67

}

func chan_str ( سلسلة تشان str ) {

وقت . ينام ( 5 * وقت . ثانية )

شارع <- 'Linux'

}

في الكود المذكور أعلاه ، استخدمنا ملف وقت النوم() تعمل داخل chan_str () وظيفة. فقط قناة الأسطوانات جاهزة للتنفيذ لأول 5 ثوانٍ. نتيجة لذلك ، فإن حدد البيان يدير القضية الفصل 1 .

انتاج |

ملحوظة: يمكنك إضافة تأخير لكلا القناتين لتأخير تنفيذ القنوات.

خاتمة

ال حدد البيان يسمح in Go باختيار وتنفيذ تعبير واحد من بين العديد من التعبيرات باستخدام مبدأ الانتظار ، حيث لن يتم تنفيذ العبارة حتى يتم الانتهاء من الاتصال. المبادئ التوجيهية المذكورة أعلاه تشمل حدد البيان النحو الأساسي والأمثلة.