المؤقتات وTickers
جدوِل العمل وكرّره
المؤقتات وTickers درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
الإيقاف المؤقت باستخدام Sleep
أبسط أداة للجدولة هي time.Sleep(d)، إذ توقفها مؤقتًا لمدة معينة.
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("start")
time.Sleep(10 * time.Millisecond)
fmt.Println("done")
}ما المؤقت؟
يعمل time.Timer مرة واحدة بعد انقضاء مدة تأخير. ويرسل الوقت الحالي عبر قناته C عند انتهاء المدة.
package main
import (
"fmt"
"time"
)
func main() {
t := time.NewTimer(10 * time.Millisecond)
<-t.C
fmt.Println("timer fired")
}الاختصار time.After
تعيد time.After(d) قناة تُرسل قيمة واحدة بعد انقضاء مدة التأخير. وهي طريقة مريحة لإنشاء مؤقت يعمل مرة واحدة دون الحاجة إلى متغير.
package main
import (
"fmt"
"time"
)
func main() {
<-time.After(10 * time.Millisecond)
fmt.Println("elapsed")
}إيقاف مؤقت
تلغي timer.Stop() المؤقت قبل تشغيله. وتعيد true إذا أوقفته في الوقت المناسب.
package main
import (
"fmt"
"time"
)
func main() {
t := time.NewTimer(time.Hour)
stopped := t.Stop()
fmt.Println("stopped:", stopped)
}ما المؤقت الدوري؟
يعمل time.Ticker بشكل متكرر على فواصل زمنية ثابتة، ويرسل عبر قناته C في كل مرة.
استخدمه لتنفيذ الأعمال الدورية مثل الاستطلاع أو إطارات الرسوم المتحركة.
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(5 * time.Millisecond)
<-ticker.C
fmt.Println("tick")
ticker.Stop()
}عدّ الإشارات
كرّر على قناة المؤقت الدوري لتنفيذ إجراء عند كل فاصل زمني، ثم أوقفه بعد وصول عدد الإشارات إلى الحد المطلوب.
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(5 * time.Millisecond)
for i := 1; i <= 3; i++ {
<-ticker.C
fmt.Println("tick", i)
}
ticker.Stop()
}أوقف المؤقت الدوري دائمًا
على عكس المؤقتات، يواصل المؤقت الدوري عمله حتى تستدعي Stop(). ويؤدي نسيان إيقافه إلى تسريب الموارد.
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(5 * time.Millisecond)
defer ticker.Stop()
<-ticker.C
fmt.Println("one tick, will stop on return")
}سهولة استخدام time.Tick
تعيد time.Tick(d) قناة المؤقت الدوري مباشرةً. وهي بسيطة، لكن لا يمكن إيقافها؛ لذلك لا تستخدمها إلا طوال مدة تشغيل البرنامج.
package main
import (
"fmt"
"time"
)
func main() {
c := time.Tick(5 * time.Millisecond)
<-c
fmt.Println("ticked")
}المهلة باستخدام select
اجمع بين قناة العمل وtime.After داخل select لتنفيذ مهلة زمنية.
package main
import (
"fmt"
"time"
)
func main() {
done := make(chan bool)
go func() { done <- true }()
select {
case <-done:
fmt.Println("work finished")
case <-time.After(time.Second):
fmt.Println("timed out")
}
}تشغّل AfterFunc دالة رد اتصال
تشغّل time.AfterFunc(d, f) الدالة f في goroutine خاصة بها بعد انقضاء مدة التأخير، دون أن تقرأ قناة بنفسك.
package main
import (
"fmt"
"time"
)
func main() {
done := make(chan bool)
time.AfterFunc(10*time.Millisecond, func() {
fmt.Println("callback ran")
done <- true
})
<-done
}المؤقت مقابل المؤقت الدوري
اختر بناءً على التكرار:
- Timer: يعمل مرة واحدة بعد مدة تأخير.
- Ticker: يعمل مرارًا وتكرارًا على فاصل زمني.
- أوقف كليهما عند الانتهاء لتحرير الموارد.
package main
import (
"fmt"
"time"
)
func main() {
<-time.After(5 * time.Millisecond)
fmt.Println("one-shot complete")
}تحقق سريع
أي نوع يعمل بشكل متكرر على فاصل زمني ثابت؟
مراجعة: المؤقتات والمؤقتات الدورية
لقد تعلمت كيفية جدولة الأعمال:
- يوقف
Sleepالتنفيذ مؤقتًا، بينما يعملTimerوtime.Afterمرة واحدة. - يعمل
Tickerوtime.Tickبشكل متكرر. - استخدم
Stop()للتنظيف، واجمعه معselectلتنفيذ المهلات الزمنية.
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(5 * time.Millisecond)
defer ticker.Stop()
for i := 0; i < 2; i++ {
<-ticker.C
fmt.Println("beat")
}
}تعلم 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الوقت والمدة
- التنسيق والتحليل
- المؤقتات وTickers
- المناطق الزمنية