ما هو Viper ولماذا هو مطلوب؟
Viper هي مكتبة قوية للغة Go (Golang)، مصممة لإدارة تكوين التطبيقات. وهي تدعم قراءة الإعدادات من مصادر مختلفة: ملفات (JSON, TOML, YAML, HCL, INI, envfile)، متغيرات البيئة، أعلام سطر الأوامر، والأنظمة البعيدة (etcd, Consul). يقوم Viper تلقائياً بدمج جميع المصادر، وحل التعارضات لصالح المصادر ذات الأولوية (على سبيل المثال، أعلام سطر الأوامر لها الأولوية القصوى). تتيح المكتبة إدارة التكوين بسهولة أثناء تشغيل التطبيق، وتتبع تغييرات الملفات، وإعادة تحميل الإعدادات ديناميكياً.
التثبيت
لتثبيت Viper، قم بتنفيذ الأمر التالي:
go get github.com/spf13/viperتأكد من أن لديك Go الإصدار 1.18 أو أحدث مثبتاً.
الوظائف الأساسية
- القراءة من الملفات: يدعم الصيغ JSON, TOML, YAML, HCL, INI, envfile.
- متغيرات البيئة: الربط التلقائي بمتغيرات البيئة.
- أعلام سطر الأوامر: التكامل مع pflag لتحليل الوسائط.
- التكوينات البعيدة: دعم etcd, Consul, Firestore (من خلال الإضافات).
- تتبع التغييرات: WatchConfig يتيح إعادة تحميل التكوين عند تغيير الملف.
- المفاتيح المتداخلة: الوصول إلى البيانات الهرمية باستخدام النقطة (مثال: app.port).
- القيم الافتراضية: يتم تعيينها عبر SetDefault.
مثال على كود Go
package main
import (\t"fmt"\t"github.com/spf13/viper")
func main() {\tviper.SetConfigName("config") // اسم الملف بدون امتداد\tviper.SetConfigType("yaml") // الصيغة\tviper.AddConfigPath(".") // المسار إلى الملف\tviper.AutomaticEnv() // قراءة متغيرات البيئة
\t// القيم الافتراضية\tviper.SetDefault("app.port", 8080)
\t// قراءة التكوين\tif err := viper.ReadInConfig(); err != nil {\t\tfmt.Printf("خطأ في قراءة التكوين: %v", err)\t}
\t// الحصول على القيم\tport := viper.GetInt("app.port")\tname := viper.GetString("app.name")
\tfmt.Printf("الخادم يعمل على المنفذ %d، التطبيق: %s", port, name)
\t// مثال لملف config.yaml:\t// app:\t// port: 3000\t// name: myapp}متى تستخدم Viper
المكتبة مثالية للخدمات المصغرة، تطبيقات الويب، أدوات سطر الأوامر (CLI)، وأي مشاريع Go تتطلب إدارة مرنة للإعدادات. وهي مفيدة بشكل خاص عندما يجب أن يؤخذ التكوين من عدة مصادر (ملف + بيئة + أعلام) أو عندما تحتاج إلى إعادة تحميل الإعدادات ديناميكياً دون إعادة تشغيل التطبيق. يعمل Viper على تبسيط العمل مع التكوين، مما يلغي الحاجة إلى التحليل اليدوي ودمج البيانات.