متغيرات البيئة
تجاوز الإعدادات من البيئة
متغيرات البيئة درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
لماذا نستخدم متغيرات البيئة
توصي منهجية Twelve-Factor App بتخزين الإعدادات في البيئة. تتيح متغيرات البيئة للملف التنفيذي نفسه أن يعمل بطرق مختلفة في بيئات التطوير والتجهيز والإنتاج، من دون تعديل الملفات.
يمكن لـ Viper إضافة متغيرات البيئة فوق إعدادات الملف.
ترتيب الأولوية
يحدّد Viper قيمة المفتاح بالتحقق من المصادر وفق ترتيب الأولوية، من الأعلى إلى الأدنى:
- استدعاءات
Setالصريحة - خيارات سطر الأوامر
- متغيرات البيئة
- ملف الإعدادات
- القيم الافتراضية
لذلك يتجاوز متغير البيئة قيمة الملف، لكنه يخضع لاستدعاء Set الصريح.
تفعيل دعم متغيرات البيئة
يخبر viper.AutomaticEnv() برنامج Viper بالتحقق من متغيرات البيئة بحثًا عن أي مفتاح تطلبه. بعد ذلك، سيتحقق viper.GetString("port") من متغير البيئة PORT.
viper.AutomaticEnv()
port := viper.GetString("port")إضافة بادئة
لتجنب التعارض مع متغيرات البيئة غير المرتبطة بالتطبيق، عيّن بادئة:
viper.SetEnvPrefix("myapp")- يرتبط المفتاح
portالآن بمتغير البيئةMYAPP_PORT
يحوّل Viper المفتاح إلى أحرف كبيرة، ثم يضيف البادئة قبله مع شرطة سفلية.
viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetString("port")) // reads MYAPP_PORTمعالجة المفاتيح المتداخلة
لا يمكن لمتغيرات البيئة أن تحتوي على نقاط. استخدم مستبدلًا للمفاتيح لتحويل المفاتيح المفصولة بنقاط إلى مفاتيح مفصولة بشرطات سفلية، بحيث يصبح server.port هو SERVER_PORT.
replacer := strings.NewReplacer(".", "_")
viper.SetEnvKeyReplacer(replacer)
viper.AutomaticEnv()
// server.port -> SERVER_PORTربط متغير واحد
بدلًا من الوضع التلقائي، يمكنك ربط مفتاح واحد صراحةً باستخدام viper.BindEnv. يفيد ذلك عندما لا يتبع اسم متغير البيئة اصطلاح البادئة لديك.
viper.BindEnv("id", "ACCOUNT_ID")
fmt.Println(viper.GetString("id"))حزمة os في المكتبة القياسية
تقرأ هذه العملية من بيئة العملية، التي توفرها المكتبة القياسية عبر os.Getenv وos.LookupEnv.
- تُرجع
os.Getenvسلسلة فارغة إذا لم يكن المتغير معيّنًا - تُرجع
os.LookupEnvقيمة منطقية ثانية تخبرك بما إذا كان المتغير موجودًا
val, ok := os.LookupEnv("PORT")
if !ok {
val = "8080" // default
}تعيين متغيرات البيئة في Go
يمكنك تعيين متغيرات البيئة برمجيًا للاختبارات أو القيم الافتراضية باستخدام os.Setenv. وهذا بالضبط ما نستخدمه لعرض سلوك التجاوز لاحقًا.
os.Setenv("MYAPP_PORT", "9090")الفارغ مقابل غير المعيّن
انتبه: يظل متغير البيئة الذي عُيّنت له سلسلة فارغة موجودًا. تُرجع os.LookupEnv القيمة ("", true). وإذا استخدمت os.Getenv وحدها، فلن تتمكن من التمييز بين القيمة الفارغة وعدم التعيين، وهو أمر مهم للخيارات الشبيهة بالقيم المنطقية.
os.Setenv("FEATURE", "")
v, ok := os.LookupEnv("FEATURE")
fmt.Println(v == "", ok) // true trueجمع الأجزاء معًا (المفهوم)
تسلسل بدء التشغيل المعتاد هو: قراءة الملف للحصول على القيم الافتراضية، ثم استدعاء AutomaticEnv حتى تكون لمتغيرات البيئة الخاصة بالنشر الأولوية. يمكن لفريق العمليات تغيير MYAPP_PORT من دون لمس ملف YAML.
viper.SetConfigName("config")
viper.ReadInConfig()
viper.SetEnvPrefix("myapp")
viper.AutomaticEnv()
fmt.Println(viper.GetInt("port"))قابل للتشغيل: عرض تجاوز متغير البيئة
يحاكي هذا البرنامج، الذي يستخدم المكتبة القياسية، أولوية Viper: قيمة افتراضية من الملف تتجاوزها قيمة من البيئة.
package main
import (
"fmt"
"os"
)
func get(key, fileDefault string) string {
if v, ok := os.LookupEnv(key); ok {
return v
}
return fileDefault
}
func main() {
os.Setenv("PORT", "9090")
fmt.Println("port:", get("PORT", "8080"))
fmt.Println("host:", get("HOST", "localhost"))
}تحقق سريع
اختبر فهمك لإعداد متغيرات البيئة.
مراجعة
لقد تعلمت كيفية تجاوز الإعدادات من البيئة:
- تحتل متغيرات البيئة مرتبة متقدمة في أولوية Viper، أعلى من الملف
- يربط
AutomaticEnvمعSetEnvPrefixالمفاتيح بالصيغةPREFIX_KEY - استخدم
SetEnvKeyReplacerللمفاتيح المتداخلة المفصولة بنقاط - تعتمد هذه الوظيفة في المكتبة القياسية على
os.Getenvوos.LookupEnv
الأسئلة الشائعة
هل درس «متغيرات البيئة» مجاني؟
نعم — نص درس «متغيرات البيئة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «متغيرات البيئة»؟
تجاوز الإعدادات من البيئة تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «متغيرات البيئة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.