Tickers للفواصل الزمنية
كرّر التنفيذ بمعدلات ثابتة
Tickers للفواصل الزمنية درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
التكرار بمعدل ثابت
عندما تحتاج ببساطة إلى تنفيذ شيء ما كل N ثانية، يكون Ticker هو الأداة المناسبة. بخلاف حلقة السكون، يعمل وفق وتيرة ثابتة ولا ينحرف بسبب وقت تنفيذ العمل.
إنشاء Ticker
تعيد time.NewTicker(d) كائن Ticker تستقبل قناته C الوقت الحالي كل d.
ticker := time.NewTicker(time.Second)
defer ticker.Stop()أوقف Ticker دائمًا
يُبقي Ticker مؤقتًا داخليًا قيد التشغيل. إذا لم تستدعِ Stop() مطلقًا، فسيحدث تسرّب للموارد. استخدم defer ticker.Stop() مباشرةً بعد إنشائه.
التكرار عبر القناة
يمكنك التكرار عبر قناة Ticker للاستجابة عند كل نبضة.
for t := range ticker.C {
fmt.Println("tick at", t)
}الإيقاف باستخدام select
اجمع بين Ticker وقناة done حتى تتمكن الحلقة من الخروج بطريقة نظيفة.
for {
select {
case <-ticker.C:
doWork()
case <-done:
return
}
}Ticker في مقابل Timer
الفرق الأساسي:
- Timer يعمل مرة واحدة بعد انتهاء مدة التأخير
- Ticker يعمل بشكل متكرر على فواصل زمنية
استخدم Timer للمهلات التي تحدث مرة واحدة، وTicker للعمل الدوري.
سهولة استخدام time.Tick
تعيد time.Tick(d) القناة فقط. وهي مريحة، لكن لا يمكن إيقافها، ولذلك تتسبب في تسرّب للموارد عند استخدامها في البرامج طويلة التشغيل. فضّل NewTicker خارج النصوص البرمجية السريعة.
for range time.Tick(time.Second) {
// simple, but cannot Stop -> avoid in servers
}التعامل مع العمل البطيء
إذا استغرق عملك وقتًا أطول من الفاصل الزمني، فلن تُوضع النبضات في قائمة انتظار؛ إذ يتجاهل Ticker النبضات بدلًا من إطلاقها دفعة واحدة. لذلك لن يتراكم لديك أي عمل متأخر، لكن قد تفوّت بعض النبضات تحت الحمل.
ضبط المعدل
لتغيير الفاصل الزمني، أنشئ Ticker جديدًا. يوفّر Go 1.15+ أيضًا ticker.Reset(d) لتغيير الفترة دون إعادة تخصيص.
ticker.Reset(500 * time.Millisecond)إلغاء Context
في الخدمات الفعلية، شغّل حلقات Ticker باستخدام context.Context حتى تتمكن إشارات الإيقاف من إيقافها بسلاسة.
case <-ctx.Done():
return ctx.Err()قابل للتشغيل: Ticker بمعدل ثابت
يعمل هذا البرنامج المستقل ثلاث مرات على فاصل زمني ثابت، ثم يتوقف بطريقة نظيفة باستخدام عدّاد.
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(10 * time.Millisecond)
defer ticker.Stop()
count := 0
for range ticker.C {
count++
fmt.Println("tick", count)
if count == 3 {
break
}
}
fmt.Println("done")
}تحقق سريع
اختبر مدى فهمك لـ Ticker.
مراجعة
لقد تعلمت استخدام Ticker للفواصل الزمنية:
- يعمل
time.NewTicker(d)كلdعلى قناتهC - استخدم دائمًا
defer ticker.Stop()لتجنب تسرّب الموارد - يتجاهل Ticker النبضات عند بطء العمل بدلًا من إطلاقها دفعة واحدة
- استخدم
Resetلتغيير المعدل، وقناة context أو done للخروج
تعلم Go مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «Tickers للفواصل الزمنية» مجاني؟
نعم — نص درس «Tickers للفواصل الزمنية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «Tickers للفواصل الزمنية»؟
كرّر التنفيذ بمعدلات ثابتة تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «Tickers للفواصل الزمنية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الجدولة المستندة إلى الوقت
- مكتبة robfig/cron
- Tickers للفواصل الزمنية
- إيقاف المهام بسلاسة