قبول أنواع محددة من المهام
في الدرس السابق تحققنا من وجود jobName. بقي سؤال آخر: هل jobType من الأنواع التي يدعمها jobrunner؟
لدينا أكثر من نوع مدعوم لذلك لا نريد سلسلة طويلة من المقارنات. نريد مقارنة jobType بمجموعة حالات واضحة.
switch jobType {
case "email", "report":
fmt.Println("job ok:", jobName, "-", jobType)
default:
fmt.Println("invalid job: unknown type", jobType)
}تختبر switch قيمة واحدة مقابل حالات case. تنفذ Go أول حالة تطابق القيمة. وإذا لم تطابق القيمة أي حالة، تنفذ default.
تحديث jobrunner
يدعم jobrunner حاليا نوعين فقط:
emailreport
أي قيمة أخرى يجب اعتبارها غير صالحة.
func main() {
name := "jobrunner"
jobName := "send welcome email"
jobType := "email"
fmt.Println(name, version)
fmt.Println("max attempts:", maxAttempts)
if jobName == "" {
fmt.Println("invalid job: name is empty")
return
}
switch jobType {
case "email", "report":
fmt.Println("job ok:", jobName, "-", jobType)
default:
fmt.Println("invalid job: unknown type", jobType)
return
}
}شغل البرنامج باستخدام:
go run main.goستلاحظ أن المهمة صحيحة لأن jobType يساوي email. غير jobType إلى "sms" ثم شغل البرنامج مرة أخرى. ستلاحظ أن switch سينتقل إلى default لأن هذا النوع غير مدعوم.
أصبح jobrunner الآن يتحقق من اسم المهمة و نوعها قبل البدء في تنفيذها.

التحدي
في المحرر، افتح ملف main.go و أضف عملية تحقق لنوع المهمة باستخدام switch.
- إذا كان النوع
emailأوreport، اطبع:
job ok: <job name> - <job type>- أما إذا كان النوع غير معروف فاطبع:
invalid job: unknown type <job type>بعدها شغل البرنامج باستخدام:
go run main.goبما أن نوع المهمة الحالي هو email، سيطبع البرنامج سطر job ok. تأكد أن المخرجات مطابقة تماما ثم اضغط على زر تشغيل و تحقق لإكمال الدرس.
بعد إكمال الدرس، جرب تغيير قيمة jobType إلى نوع آخر مثل "sms" و لاحظ كيف ينتقل switch إلى default.
الخلاصة
أصبح jobrunner الآن يتحقق من أكثر من شرط قبل تنفيذ المهمة.
تعلمت استخدام switch لاختيار مسار التنفيذ من بين عدة احتمالات، كما تعرفت على default للتعامل مع الحالات غير المتوقعة.
في الدرس القادم سنستخدم الحلقة for لتكرار تنفيذ جزء من البرنامج.