0Pricing
Go Academy · درس

الخيارات والخيارات المستمرة

خيارات string وint وbool والتكامل مع Viper

الخيارات والخيارات المستمرة درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

الخيارات المحلية

تنطبق الخيارات المحلية على الأمر الذي عُرّفت فيه فقط. استخدم cmd.Flags():

var port int
serveCmd.Flags().IntVar(&port, "port", 8080, "HTTP server port")

الخيارات المستمرة

ترث الأمرَ وجميعَ أوامره الفرعية الخياراتُ المستمرة. استخدم cmd.PersistentFlags():

var verbose bool
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Enable verbose output")

الخيارات المختصرة

استخدم صيغ *VarP لإضافة اختصار مكوّن من حرف واحد:

cmd.Flags().StringVarP(&output, "output", "o", "stdout", "Output destination")

أنواع الخيارات

تدعم Cobra، عبر pflag، الأنواع التالية: String وBool وInt وInt64 وFloat64 وStringSlice وDuration وCount، وغيرها. ولكل نوع صيغة Var (تتلقى مؤشرًا) وصيغة ملائمة (تعيد مؤشرًا).

الخيارات المطلوبة

حدّد الخيار بوصفه مطلوبًا — ستصدر Cobra خطأً إذا لم يقدّمه المستخدم:

cmd.MarkFlagRequired("config")

مجموعات الخيارات

حدّد الخيارات على أنها متبادلة الاستبعاد أو مطلوبة معًا باستخدام MarkFlagsRequiredTogether وMarkFlagsMutuallyExclusive:

cmd.MarkFlagsRequiredTogether("user", "password")
cmd.MarkFlagsMutuallyExclusive("json", "yaml")

خيار StringSlice

اقبل قيمًا متعددة في قائمة مفصولة بفواصل أو باستخدام خيارات مكررة:

var tags []string
cmd.Flags().StringSliceVar(&tags, "tags", nil, "Tags (comma-separated)")
// Usage: --tags a,b,c or --tags a --tags b

ربط الخيارات بـ Viper

اربط خيار cobra بمفتاح Viper حتى تأتي القيمة أيضًا من متغير بيئة أو ملف إعداد:

viper.BindPFlag("port", serveCmd.Flags().Lookup("port"))
viper.BindEnv("port", "APP_PORT")

عرض القيمة الافتراضية

تعرض Cobra القيمة الافتراضية تلقائيًا في نص المساعدة. قدّم قيمة افتراضية واضحة تعمل مباشرةً في الحالة الشائعة.

الوصول إلى قيم الخيارات

يمكنك الوصول إلى قيم الخيارات عبر المؤشر الذي ربطته، أو البحث عنها بالاسم من مجموعة خيارات الأمر إذا لم يكن المؤشر متاحًا:

port, _ := cmd.Flags().GetInt("port")

دالة Changed

تعيد cmd.Flags().Changed("flag-name") القيمة true فقط إذا حدّد المستخدم الخيار صراحةً. استخدمها للتمييز بين «لم يُقدَّم» و«قُدِّم بالقيمة الافتراضية».

اختبار سريع

ما الفرق بين الخيار المحلي والخيار المستمر في Cobra؟

خلاصة: الخيارات والخيارات المستمرة

النقاط الأساسية:

  • cmd.Flags(): محلية؛ وcmd.PersistentFlags(): موروثة من الأوامر الفرعية
  • استخدم *VarP للاختصار؛ وMarkFlagRequired للخيارات الإلزامية
  • استخدم MarkFlagsRequiredTogether / MarkFlagsMutuallyExclusive لتحديد العلاقات
  • استخدم Changed() لاكتشاف ما إذا كان المستخدم قد حدّد خيارًا صراحةً

الأسئلة الشائعة

هل درس «الخيارات والخيارات المستمرة» مجاني؟

نعم — نص درس «الخيارات والخيارات المستمرة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «الخيارات والخيارات المستمرة»؟

خيارات string وint وbool والتكامل مع Viper تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «الخيارات والخيارات المستمرة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات Cobra
  2. الخيارات والخيارات المستمرة
  3. الأوامر الفرعية ومجموعات الأوامر
  4. توزيع أدوات CLI
← العودة إلى Go Academy