Go Academy · درس

القيم الافتراضية والمراقبة

حدّد القيم الافتراضية وأعد التحميل الفوري

الدرس 3 من 413 خطوة

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

قيم افتراضية مناسبة

تعمل أنظمة الإعدادات الجيدة حتى عندما لا تكون هناك أي قيم معيّنة. توفر القيم الافتراضية قيمة بديلة لكل مفتاح، حتى لا يتعطل برنامجك عند فقدان قيمة.

يوفر Viper الدالة SetDefault لهذا الغرض، وتقع هذه القيم في أدنى مرتبة من سلسلة الأولوية.

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

سجّل القيم الافتراضية قبل قراءة الملف. ويمكن لأي مصدر، مثل الملف أو البيئة أو الخيار، تجاوز هذه القيم.

viper.SetDefault("port", 8080)
viper.SetDefault("logLevel", "info")
fmt.Println(viper.GetInt("port"))

لماذا تفيد القيم الافتراضية

تقلل القيم الافتراضية حجم ملفات الإعدادات؛ إذ لا يحتاج فريق العمليات إلى تجاوز سوى القيم المختلفة عن المعتاد. كما توثّق مباشرةً في الشيفرة البنية المتوقعة للإعدادات.

إعادة التحميل الفوري باستخدام WatchConfig

قد ترغب أحيانًا في تطبيق تغييرات الإعدادات من دون إعادة التشغيل. تراقب viper.WatchConfig() الملف بحثًا عن التغييرات باستخدام fsnotify.

viper.WatchConfig()

التفاعل مع التغييرات

سجّل دالة رد نداء لتشغيلها عند تغيّر الملف:

viper.OnConfigChange(func(e fsnotify.Event) {
    fmt.Println("config changed:", e.Name)
})
viper.WatchConfig()

متى تفيد إعادة التحميل الفوري

تكون إعادة التحميل الفوري مفيدة للقيم التي يمكن تغييرها بأمان أثناء التشغيل:

  • درجة تفصيل السجلات
  • أعلام الميزات
  • حدود معدل الطلبات

تجنب إعادة التحميل الفوري لأمور مثل منفذ الاستماع أو DSN قاعدة البيانات، إذ تتطلب عادةً إعادة التشغيل.

مشكلة أمان الخيوط

عندما تكون الإعدادات قابلة للتغيير أثناء التشغيل، قد تقرؤها عدة goroutines. وتكون دوال الحصول على القيم في Viper آمنة عند استدعائها بالتزامن، لكن إذا خزّنت القيم في متغيراتك الخاصة، فاحمها باستخدام mutex أو قيمة ذرية.

var cfg atomic.Value // stores a Config struct
cfg.Store(loadConfig())

نمذجة القيم الافتراضية دون Viper

يمكنك التعبير عن فكرة القيم الافتراضية نفسها باستخدام Go عادي: دالة تُرجع القيمة إذا كانت موجودة، وإلا تُرجع قيمة بديلة.

func intOr(m map[string]int, key string, def int) int {
    if v, ok := m[key]; ok {
        return v
    }
    return def
}

التحقق بعد إعادة التحميل

تحقق دائمًا من الإعدادات بعد إعادة تحميلها وقبل تطبيقها. يجب أن يُبقي الخطأ المطبعي في الملف على الإعدادات القديمة السليمة، لا أن يتسبب في تعطل الخدمة قيد التشغيل. سجّل الخطأ وواصل تقديم الخدمة.

newCfg, err := load()
if err != nil {
    log.Println("bad config, keeping current:", err)
    return
}
current.Store(newCfg)

محاكاة إعادة التحميل

من الناحية المفاهيمية، تعيد عملية التحميل قراءة المصدر ثم تستبدل الإعدادات النشطة. ويكتفي برنامج المراقبة بتشغيل عملية الاستبدال هذه عند تغيّر mtime للملف. يوضح العرض القابل للتشغيل التالي تغيّر القيمة.

قابل للتشغيل: القيم الافتراضية وإعادة التحميل

يوضح هذا البرنامج المستقل منطق القيم الافتراضية، ثم يحاكي إعادة تحميل تغيّر قيمة.

package main

import "fmt"

func get(m map[string]int, k string, def int) int {
    if v, ok := m[k]; ok {
        return v
    }
    return def
}

func main() {
    cfg := map[string]int{}
    fmt.Println("port (default):", get(cfg, "port", 8080))
    cfg["port"] = 9090 // simulated reload
    fmt.Println("port (reloaded):", get(cfg, "port", 8080))
}

تحقق سريع

اختبر فهمك للقيم الافتراضية والمراقبة.

مراجعة

لقد تعلمت القيم الافتراضية وإعادة التحميل الفوري:

  • توفر SetDefault قيمًا بديلة في أدنى مرتبة من الأولوية
  • تتيح WatchConfig مع OnConfigChange إعادة التحميل المباشر
  • أعد تحميل القيم الفوريًا فقط إذا كان تغييرها أثناء التشغيل آمنًا
  • احمِ الإعدادات المخزنة مؤقتًا باستخدام القيم الذرية أو mutex، وتحقق منها قبل تطبيقها
البدء مجانًا

تعلم Go مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
51
الدروس
203

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

هل درس «القيم الافتراضية والمراقبة» مجاني؟

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

ماذا ستتعلم في «القيم الافتراضية والمراقبة»؟

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

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

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

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

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

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

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

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

  1. قراءة ملفات الإعداد
  2. متغيرات البيئة
  3. القيم الافتراضية والمراقبة
  4. الربط بالبُنى
← العودة إلى Go Academy