0Pricing
Go Academy · درس

قراءة ملفات الإعداد

حمّل YAML وJSON وTOML

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

الإعدادات خارج الشيفرة

إن تضمين قيم مثل المنافذ وأسماء المضيفين والمهلات الزمنية داخل برنامج Go مباشرةً أمر هش. تُعد Viper مكتبة الإعدادات الفعلية في Go؛ فهي تقرأ الإعدادات من الملفات ومتغيرات البيئة والخيارات ومخازن البيانات البعيدة.

ستحمّل في هذا الدرس الإعدادات من ملف موجود على القرص.

ما الصيغ التي يقرأها Viper

يدعم Viper العديد من الصيغ مباشرةً:

  • YAML (.yaml / .yml)
  • JSON (.json)
  • TOML (.toml)
  • ملفات HCL وINI وJava properties

تختار الصيغة باستخدام SetConfigType، أو يستنتجها Viper من امتداد الملف.

تثبيت Viper واستيراده

أضف Viper إلى الوحدة واستورده:

  • go get github.com/spf13/viper
  • import "github.com/spf13/viper"

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

import "github.com/spf13/viper"

إخبار Viper بمكان البحث

تُعدّ اسم الملف ونوعه ومسارات البحث قبل القراءة:

  • viper.SetConfigName("config") يحدّد الاسم الأساسي، من دون الامتداد
  • viper.SetConfigType("yaml") يحدّد الصيغة
  • viper.AddConfigPath(".") يضيف دليلًا إلى مسارات البحث
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".")
viper.AddConfigPath("/etc/myapp")

قراءة الملف

استدعِ viper.ReadInConfig() لتحميل الملف. تُرجع هذه الدالة خطأً يجب التحقق منه:

  • يُرجع الملف المفقود خطأً من النوع ConfigFileNotFoundError
  • يُرجع الملف غير السليم خطأً في التحليل
if err := viper.ReadInConfig(); err != nil {
    log.Fatalf("failed to read config: %v", err)
}

مثال على إعدادات YAML

تخيّل ملف config.yaml بهذا الشكل. يحوّل Viper المفاتيح المتداخلة إلى مفاتيح مسطحة باستخدام النقاط، لذلك يصبح المنفذ server.port.

server:
  port: 8080
  host: "localhost"
debug: true

الحصول على قيم من أنواع محددة

يوفر Viper دوالّ للحصول على القيم بأنواع محددة، ما يجنبك التحويلات اليدوية:

  • viper.GetInt("server.port")
  • viper.GetString("server.host")
  • viper.GetBool("debug")
port := viper.GetInt("server.port")
host := viper.GetString("server.host")
debug := viper.GetBool("debug")
fmt.Println(host, port, debug)

يعمل JSON بالطريقة نفسها

لا يتطلب الانتقال إلى JSON سوى تغيير محتوى الملف ونوع الإعدادات. وتظل مسارات المفاتيح ودوال الحصول على القيم نفسها. هذه القابلية للنقل هي سبب شيوع Viper: فلا يعتمد شيفرتك على الصيغة التي اختارها فريق العمليات.

{
  "server": { "port": 8080, "host": "localhost" },
  "debug": true
}

يدعم أيضًا TOML

تشيع TOML في منظومة Go؛ إذ تستخدمها العديد من أدوات سطر الأوامر. وتُحوّل المفاتيح المتداخلة نفسها إلى مسارات مفصولة بنقاط.

[server]
port = 8080
host = "localhost"

debug = true

تحليل JSON باستخدام المكتبة القياسية

لرؤية الفكرة وهي تعمل فعليًا، إليك تحليلًا لإعدادات JSON باستخدام Go عادي ومن دون Viper، بالاعتماد على encoding/json فقط لتحميل البيانات في map؛ إذ يعمل Viper نفسه على map عامة في الخلفية.

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    raw := "{\"port\":8080,\"host\":\"localhost\"}"
    var c map[string]any
    if err := json.Unmarshal([]byte(raw), &c); err != nil {
        panic(err)
    }
    fmt.Printf("%v:%v\n", c["host"], c["port"])
}

قابل للتشغيل: القراءة في map

يحلّل هذا البرنامج المستقل إعدادات JSON في map عامة ويطبع القيم، محاكيًا ما يفعله Viper في الخلفية عند التعامل مع JSON.

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    raw := "{\"port\":8080,\"host\":\"localhost\"}"
    var m map[string]any
    json.Unmarshal([]byte(raw), &m)
    fmt.Println("host:", m["host"])
    fmt.Println("port:", m["port"])
}

تحقق سريع

اختبر فهمك لقراءة ملفات الإعدادات باستخدام Viper.

مراجعة

لقد تعلمت كيفية قراءة Viper لملفات الإعدادات:

  • يدعم YAML وJSON وTOML بشفافية
  • اضبطه باستخدام SetConfigName وSetConfigType وAddConfigPath
  • تُحمّل ReadInConfig() الملف وتُرجع خطأً
  • تقرأ دوال الحصول على القيم بأنواع محددة، مثل GetInt وGetString، القيم باستخدام مفتاح مفصول بنقاط

التالي: تجاوز الإعدادات باستخدام متغيرات البيئة.

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

هل درس «قراءة ملفات الإعداد» مجاني؟

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

ماذا ستتعلم في «قراءة ملفات الإعداد»؟

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

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

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

كم من الوقت يستغرق درس «قراءة ملفات الإعداد»؟

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

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

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

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

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