"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تحليل ملفات YAML باستخدام المفاتيح الديناميكية في Go؟

كيفية تحليل ملفات YAML باستخدام المفاتيح الديناميكية في Go؟

تم النشر بتاريخ 2024-11-20
تصفح:739

How to Parse YAML Files with Dynamic Keys in Go?

تحليل كود Go باستخدام المفاتيح الديناميكية YAML

لتحليل كود Go في ملف YAML الذي يحتوي على مفاتيح ديناميكية، اتبع الخطوات التالية:

1 المكتبة:

go get gopkg.in/yaml.v2

2. حدد هيكل النموذج:
قم بإنشاء هيكل لتمثيله بيانات YAML. إذا كنت تعرف جميع المفاتيح الممكنة، فيمكنك تعريفها باستخدام الحقول العادية، وإلا يمكنك استخدام حقول Map[string]interface{} لتحتوي على مفاتيح ديناميكية.

3. استخدم Unmarshaler مخصص (اختياري):
إذا كنت بحاجة إلى تخصيص كيفية تحليل بيانات YAML، يمكنك استخدام Unmarshaler مخصص. يمكن أن يساعدك هذا في التعامل مع المفاتيح الديناميكية أو سيناريوهات التحليل المعقدة الأخرى.

4. تحليل بيانات YAML:
استخدم وظيفة yaml.Unmarshal لتحليل بيانات YAML وإلغاء تسلسلها في بنية نموذجية.

مثال:
يوضح المثال التالي كيفية تحليل ملف YAML باستخدام مفاتيح ديناميكية:

package main

import (
    "fmt"

    "gopkg.in/yaml.v2"
)

var data = `
---
development:
  skip-header-validation: true
  V1:
    current: "1.0.0"
    mime_types:
      - application/vnd.company.jk.identity json;
      - application/vnd.company.jk.user json;
      - application/vnd.company.jk.role json;
      - application/vnd.company.jk.scope json;
      - application/vnd.company.jk.test json;
    skip-mime-type-validation: true
    skip-version-validation: true
  V2:
    current: "2.0.0"
    mime_types:
      - application/vnd.company.jk.identity json;
      - application/vnd.company.jk.user json;
      - application/vnd.company.jk.role json;
      - application/vnd.company.jk.scope json;
      - application/vnd.company.jk.test json;

`

type MajorVersion struct {
    Current                 string   `yaml:"current"`
    MimeTypes               []string `yaml:"mime_types"`
    SkipVersionValidation  bool     `yaml:"skip-version-validation"`
    SkipMimeTypeValidation bool     `yaml:"skip-mime-type-validation"`
}

type Environment struct {
    SkipHeaderValidation bool
    Versions             map[string]MajorVersion `yaml:",inline"`
}

func main() {
    e := map[string]Environment{}
    if err := yaml.Unmarshal([]byte(data), &e); err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("%#v\n", e)
}

الإخراج:

map[string]main.Environment{
    "development": {
        SkipHeaderValidation: true,
        Versions: {
            "V1": {
                Current:                "1.0.0",
                MimeTypes:              {"application/vnd.company.jk.identity json;", "application/vnd.company.jk.user json;", "application/vnd.company.jk.role json;", "application/vnd.company.jk.scope json;", "application/vnd.company.jk.test json;"},
                SkipVersionValidation:  true,
                SkipMimeTypeValidation: true,
            },
            "V2": {
                Current:                "2.0.0",
                MimeTypes:              {"application/vnd.company.jk.identity json;", "application/vnd.company.jk.user json;", "application/vnd.company.jk.role json;", "application/vnd.company.jk.scope json;", "application/vnd.company.jk.test json;"},
                SkipVersionValidation:  false,
                SkipMimeTypeValidation: false,
            },
        },
    },
}
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3