الوقت هو كل شيء في حياتنا اليومية، ولكنه أكثر أهمية عندما يتعلق الأمر بالبرمجة مثل جدولة المهام، وتنفيذ المهلات، وبناء التطبيقات المتزامنة، والمزيد.
في Go، لدينا مؤقتات تسمح لنا بإنشاء عمل مع الأوقات بكفاءة. يتم توفير الموقتات من خلال حزمة 'الوقت'.
سنعلمك في هذا البرنامج التعليمي كل ما تحتاج لمعرفته حول المؤقتات في Go. سوف نتعلم أشياء مثل ماهية أجهزة ضبط الوقت، والاستخدامات الشائعة لأجهزة ضبط الوقت، ثم التطبيقات التفصيلية لأجهزة ضبط الوقت.
توقيتات جولانج
الموقتات هي أحداث تعتمد على الوقت وتطلق إجراءً محددًا عند نقطة محددة مسبقًا في المستقبل. فكر في الأمر كطريقة لإعداد حدث مستقبلي.
تلعب أجهزة ضبط الوقت دورًا أساسيًا في التعامل مع العمليات المتعلقة بالوقت في تطبيقات Go.
تعد الموقتات مفيدة لأغراض مختلفة مثل جدولة المهام وتنفيذ المهلات ومزامنة العمليات المتزامنة.
استخدامات الموقتات
تتضمن بعض حالات الاستخدام الشائعة للمؤقتات في Go ما يلي:
- جدولة المهام – تسمح لنا الموقتات بجدولة المهام التي يمكن تشغيلها في وقت محدد أو على فترات زمنية مختلفة.
- تنفيذ المهلات - عندما تحتاج إلى فرض الحدود الزمنية على عملية معينة، فمن المحتمل أن تكون أجهزة ضبط الوقت هي أفضل رهان لك. على سبيل المثال، يمكنك استخدام مؤقت لإلغاء مهمة إذا استغرق إكمالها وقتًا طويلاً.
- الحد من المعدل – يمكننا أيضًا استخدام الموقتات للتحكم في المعدل الذي يُسمح به بحدوث إجراء أو طلب معين.
- المزامنة المتزامنة – يمكن أن تساعد أجهزة ضبط الوقت في تنسيق ومزامنة العمليات المتزامنة.
بعد أن انتهينا من ذلك، دعونا نتعمق في تفاصيل أجهزة ضبط الوقت في Go.
إنشاء مؤقت في Golang
في Go، يمكننا إنشاء مؤقت باستخدام طريقة NewTimer() من الحزمة 'time'. تقبل الدالة مدة كمعلمة كما هو موضح في بناء الجملة التالي:
الحزمة الرئيسيةيستورد (
'إف إم تي'
'وقت'
)
func الرئيسي ( ) {
الموقت := time.NewTimer ( 2 * الوقت.الثانية )
fmt.Println ( 'في انتظار انتهاء صلاحية المؤقت...' )
< -المؤقت.C
fmt.Println ( 'انتهت صلاحية الموقت!' )
}
في هذا المثال، قمنا بإنشاء مؤقت تنتهي صلاحيته بعد ثانيتين. ثم ننتظر انتهاء صلاحيته باستخدام '<- timer.C'.
يمثل نوع 'المؤقت' حدثًا واحدًا. عند انتهاء صلاحية المؤقت، سيتم إرسال الوقت الحالي إلى لغة C، ما لم يتم إنشاء المؤقت بواسطة AfterFunc.
إعادة ضبط الموقت في Golang
يدعم Go إمكانية إعادة ضبط المؤقت ليبدأ العد مرة أخرى بعد مدة محددة. يعد هذا مفيدًا بشكل لا يصدق عندما تحتاج إلى إعادة استخدام المؤقت دون تكراره فعليًا.
مثال على النحو التالي:
الحزمة الرئيسيةيستورد (
'إف إم تي'
'وقت'
)
func الرئيسي ( ) {
الموقت := time.NewTimer ( 2 * الوقت.الثانية )
الموقت. إعادة تعيين ( 1 * الوقت.الثانية )
fmt.Println ( 'في انتظار انتهاء صلاحية المؤقت...' )
< -المؤقت.C
fmt.Println ( 'انتهت صلاحية الموقت!' )
}
يجب أن يقوم هذا بإعادة ضبط المؤقت بعد ثانية واحدة كما هو محدد في طريقة timer.Reset() .
إيقاف الموقت في جولانج
يمكننا إيقاف المؤقت قبل انتهاء صلاحيته عن طريق استدعاء الأسلوب Timer.Stop() . وهذا يمنع المؤقت من تشغيل الإجراء المرتبط به.
رمز المثال هو كما يلي:
الحزمة الرئيسيةيستورد (
'إف إم تي'
'وقت'
)
func الرئيسي ( ) {
الموقت := time.NewTimer ( 5 * الوقت.الثانية )
توقف := timer.Stop ( )
لو توقفت {
fmt.Println ( 'توقف الموقّت قبل انتهاء صلاحيته' )
} آخر {
fmt.Println ( 'انتهت صلاحية الموقّت أو توقف بالفعل' )
}
}
هذا يجب أن يوقف الموقت بعد ثانية واحدة. وهذا يعني أن مؤقت الخمس ثواني لن ينقضي قبل الإنهاء.
استخدام بيان التحديد مع الموقتات
إحدى أقوى عمليات المؤقتات وأكثرها فائدة في Go هي إقرانها بعبارة Go 'select'. يساعد هذا في التعامل مع قنوات متعددة بما في ذلك أجهزة ضبط الوقت بطريقة متزامنة.
ملاحظة: في Go، يتمثل دور عبارة 'select' في تمكيننا من انتظار عمليات القنوات المتعددة واتخاذ الإجراءات بناءً على العملية الأولى التي تصبح جاهزة.
يمكننا استخدام المؤقتات مع عبارة 'select' كما هو موضح في المثال التالي:
الحزمة الرئيسيةيستورد (
'إف إم تي'
'وقت'
)
func الرئيسي ( ) {
المهلة := time.NewTimer ( 5 * الوقت.الثانية )
الذهاب وظيفة ( ) {
وقت النوم ( 2 * الوقت.الثانية )
} ( )
يختار {
قضية < -المهلة ج:
fmt.Println ( 'انتهى وقت العملية' )
قضية < -الوقت بعد ( 4 * الوقت.الثانية ) :
fmt.Println ( 'الاحتياط: استغرقت العملية وقتًا طويلاً' )
}
}
في هذا المثال، قمنا بإنشاء مؤقت بمهلة مدتها خمس ثوانٍ. نستخدم بعد ذلك عبارة 'select' للتعامل مع المهلة أو الحالة الاحتياطية.
الموقتات الدورية مع شريط
الشيء التالي الذي يتناسب بشكل جيد مع أجهزة ضبط الوقت هو المؤشرات. تتيح لنا المؤشرات تنفيذ إجراء ما بشكل متكرر على فترات زمنية محددة باستخدام شريط الوقت.
يمكنك التفكير في المؤشر باعتباره مؤقتًا يتم إعادة ضبطه تلقائيًا بعد كل انتهاء صلاحية.
الحزمة الرئيسيةيستورد (
'إف إم تي'
'وقت'
)
func الرئيسي ( ) {
شريط := time.NewTicker ( 1 * الوقت.الثانية )
// كرر المهمة
الذهاب وظيفة ( ) {
ل {
< -رمز.C
fmt.Println ( 'ضع علامة!' )
}
} ( )
// يجري ل 5 ثواني
وقت النوم ( 5 * الوقت.الثانية )
// أوقف المؤشر
توقف ( )
fmt.Println ( 'توقف المؤشر' )
}
في المثال الموضح، نبدأ بتحديد المهمة التي نرغب في تكرارها لفترات زمنية محددة.
نقوم بعد ذلك بإنشاء شريط جديد يحدد كل ثانية وننفذ المهمة السابقة. نتوقف بعد ذلك عن استخدام طريقة Ticker.Stop() .
يؤدي تشغيل التعليمات البرمجية السابقة إلى إرجاع إخراج مثال كما يلي:
ضع علامة !ضع علامة !
ضع علامة !
ضع علامة !
توقف المؤشر
خاتمة
في هذا البرنامج التعليمي، اكتشفنا الكثير عن المؤقتات في Go باستخدام حزمة 'الوقت'. لقد بدأنا بأساسيات إنشاء المؤقتات وإعادة ضبطها وإيقافها. تعلمنا بعد ذلك كيفية استخدام الموقتات مع عبارات 'التحديد' وتعرفنا على المؤشرات.