مرحبا يا هبر! أقدم لكم ترجمة المقال
دليل لا معنى له لمتغيرات البيئة في Go by Enda Endelan.
تعد متغيرات البيئة هي أفضل طريقة لتخزين تكوينات التطبيقات ، حيث يمكن ضبطها على مستوى النظام. هذا أحد مبادئ منهجية
تطبيق Twelve-Factor App ، فهو يسمح لك بفصل التطبيقات عن النظام الذي تعمل فيه (يمكن أن يختلف التكوين بشكل كبير بين عمليات النشر ، ويجب ألا يكون الرمز مختلفًا).
باستخدام متغيرات البيئة
كل ما هو مطلوب للتفاعل مع متغيرات البيئة هو في مكتبة
os القياسية. هذه هي كيفية الحصول على قيمة متغير بيئة PATH:
package main import ( "fmt" "os" ) func main() {
وهكذا - اضبط قيمة المتغير:
package main import ( "fmt" "os" ) func main() {
تحميل متغيرات البيئة من ملف .env
على جهاز التطوير ، حيث يتم إطلاق العديد من المشاريع على الفور ، فإن تخزين المعلمات في بيئات متغيرة ليس دائمًا مناسبًا ؛ سيكون من المنطقي تقسيمها بين المشاريع باستخدام ملفات env. يمكنك القيام بذلك ، على سبيل المثال ، باستخدام
godotenv - هذا هو
dotenv المنقول إلى مكتبة Go Ruby. يسمح لك بتعيين متغيرات البيئة الضرورية للتطبيق من ملف .env.
لتثبيت الحزمة ، قم بتشغيل:
go get github.com/joho/godotenv
أضف الإعدادات إلى ملف .env في جذر المشروع:
GITHUB_USERNAME=craicoverflow GITHUB_API_KEY=TCtQrZizM1xeo1v92lsVfLOHDsF7TfT5lMvwSno
يمكنك الآن استخدام هذه القيم في التطبيق:
package main import ( "log" "github.com/joho/godotenv" "fmt" "os" )
من المهم أن تتذكر أنه إذا تم تعيين قيمة متغير البيئة على مستوى النظام ، فسيستخدم Go هذه القيمة بدلاً من القيمة المحددة في ملف env.
التفاف متغيرات البيئة في وحدة التكوين
من الجيد ، بالطبع ، الوصول إلى متغيرات البيئة مباشرةً ، كما هو موضح أعلاه ، ولكن الحفاظ على هذا الحل يبدو مشكلة إلى حد ما. اسم المتغير عبارة عن سلسلة ، وإذا تغير ، تخيل صداعًا سينتج عنه عملية تحديث مراجع المتغيرات في جميع أنحاء التطبيق.
لحل هذه المشكلة ، سنقوم بإنشاء وحدة تكوين للعمل مع متغيرات البيئة بطريقة أكثر مركزية ودعمًا.
فيما يلي وحدة
تهيئة بسيطة تقوم بإرجاع معلمات التكوين في بنية
التكوين (نقوم أيضًا بتعيين القيم الافتراضية للمعلمات في حالة عدم وجود متغير بيئة في النظام):
package config import ( "os" ) type GitHubConfig struct { Username string APIKey string } type Config struct { GitHub GitHubConfig }
بعد ذلك ، أضف الأنواع إلى بنية
Config ، حيث أن الحل الحالي يدعم فقط أنواع السلسلة ، وهو أمر غير معقول للتطبيقات الكبيرة.
إنشاء معالجات لأنواع bool و slice و integer:
package config import ( "os" "strconv" "strings" ) type GitHubConfig struct { Username string APIKey string } type Config struct { GitHub GitHubConfig DebugMode bool UserRoles []string MaxUsers int }
أضف متغيرات بيئة جديدة إلى ملف env لدينا:
GITHUB_USERNAME=craicoverflow GITHUB_API_KEY=TCtQrZizM1xeo1v92lsVfLOHDsF7TfT5lMvwSno MAX_USERS=10 USER_ROLES=admin,super_admin,guest DEBUG_MODE=false
الآن يمكنك استخدامها في أي مكان في التطبيق:
package main import ( "fmt" "log" "github.com/craicoverflow/go-environment-variables-example/config" "github.com/joho/godotenv" )
القيام به!
نعم ، هناك حزم تقدم حلاً جاهزًا لتكوين التطبيق الخاص بك ، ولكن ما مقدار ما يحتاجون إليه إذا كان من السهل القيام بذلك بنفسك؟
وكيف تدير التكوين في تطبيقك؟