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

كيفية تحليل ملف YAML باستخدام أزواج القيمة الرئيسية المتداخلة في Go؟

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

How to Parse a YAML File with Nested Key-Value Pairs in Go?

تحليل ملف YAML في Go

يتضمن تحليل ملفات YAML في Go استخدام مكتبة YAML المتاحة من خلال gopkg.in/yaml.v2. تم تصميم الكود المقدم لتحليل ملف YAML مع أزواج قيمة المفتاح المتداخلة، مثل ما يلي:

firewall_network_rules: القاعدة 1: src: مضيف blablabla dst: blabla-hostname
firewall_network_rules:
  rule1:
    src:       blablabla-host
    dst:       blabla-hostname
ومع ذلك، تنشأ مشكلات عند محاولة تحليل أزواج القيمة الرئيسية دون القيم المصاحبة. لا تحدد البنية المطبقة هذه القيم، مما يؤدي إلى حدوث خطأ أثناء التحليل.

لمعالجة هذه المشكلة، فكر في دمج مثال YAML واقعي، مثل Service.yaml من Google Cloud أو Kubernetes:

apiVersion: v1 النوع: الخدمة البيانات الوصفية: الاسم: اسمي مساحة الاسم: افتراضية التسميات: router.deis.io/routable: "صحيح" الشروح: router.deis.io/domains: "" المواصفات: النوع: نوديبورت محدد: التطبيق: اسمي الموانئ: - الاسم: http المنفذ: 80 المنفذ المستهدف: 80 - الاسم: https المنفذ: 443 targetPort: 443
apiVersion: v1
kind: Service
metadata:
  name: myName
  namespace: default
  labels:
    router.deis.io/routable: "true"
  annotations:
    router.deis.io/domains: ""
spec:
  type: NodePort
  selector:
    app: myName
  ports:
    - name: http
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 443
يوضح هذا المثال العلاقات المتداخلة بين القيمة الرئيسية ويوفر حالة استخدام عملية. قد تشبه بنية Go المقابلة ما يلي:

type Service struct { سلسلة APIVersion `yaml:"apiVersion"` سلسلة نوع `yaml:"kind"` بنية البيانات الوصفية { سلسلة الاسم `yaml:"name"` سلسلة مساحة الاسم `yaml:"مساحة الاسم"` هيكل التسميات { سلسلة RouterDeisIoRoutable `yaml:"router.deis.io/routable"` } `yaml:"labels"` هيكل التعليقات التوضيحية { سلسلة RouterDeisIoDomains `yaml:"router.deis.io/domains"` } `yaml:"التعليقات التوضيحية"` } هيكل المواصفات { اكتب السلسلة `yaml:"type"` هيكل المحدد { سلسلة التطبيق `yaml:"app"` } المنافذ [] البنية { سلسلة الاسم `yaml:"name"` ميناء int `yaml:"port"` TargetPort int `yaml:"targetPort"` NodePort int `yaml:"nodePort,omitempty"` } `yaml:"ports"` }
firewall_network_rules:
  rule1:
    src:       blablabla-host
    dst:       blabla-hostname
لتبسيط العملية، توفر خدمات مثل yaml-to-go وjson-to-go أدوات ملائمة لتحويل بنيات YAML إلى Go، مما يجعل مهمة التحليل أكثر قابلية للإدارة.

أخيرًا، لإلغاء تنظيم ملف YAML في البنية الخاصة بك، يمكنك استخدام الكود التالي:

varservice Service يخطئ := yaml.Unmarshal(yourFile, &service) إذا أخطأت! = لا شيء { الذعر (خطأ)
firewall_network_rules:
  rule1:
    src:       blablabla-host
    dst:       blabla-hostname
يتيح هذا الأسلوب الوصول إلى البيانات التي تم تحليلها من خلال بنية الخدمة، مما يسمح لك بالتفاعل مع معلومات ملف YAML في تطبيق Go الخاص بك.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3