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

كيف يمكنني إلغاء تنظيم JSON بأمان باستخدام الأنواع العامة في Go 1.18؟

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

How Can I Safely Unmarshal JSON with Generic Types in Go 1.18?

الاستخدام العام في Unmarshal (Go 1.18)

عند استخدام الأدوية العامة في Go 1.18، مثل إنشاء حاوية للاحتفاظ بأنواع مختلفة من التقارير، يمكن أن تنشأ قيود النوع. خذ بعين الاعتبار الإعداد التالي:

  • أنواع تقارير متعددة ممثلة بالبنيات
  • غلاف ReportContainer مع معلمة نوع عامة قابلة للإبلاغ، مقيدة بتنفيذ الواجهة القابلة للإبلاغ
  • أداة تمييز ReportType لتحديد نوع التقرير الملموس أثناء إلغاء التنظيم

قد تواجه تحديات مع قيود النوع على أنواع الإرجاع، مما يؤدي إلى "دلالات النص الحر" في وظيفة GetBody() لاستيعاب تأكيد النوع.

التحديات والحلول

تنبع المشكلة من عدم دعم Go لتأكيدات النوع للبنيات وعدم السماح للمؤشرات بالأنواع العامة. لمعالجة هذه المشكلة، يمكنك إنشاء واجهة تقوم بتنفيذ Getters لـ LocationID، وProvider، وReportType، وBody. ومع ذلك، يتطلب هذا الحل التضحية بسلامة النوع.

يتضمن النهج الأكثر أمانًا التخلي عن تعدد الأشكال البارامترية واستخدام بيان تبديل ملموس استنادًا إلى قيمة التمييز أثناء إلغاء تنظيم JSON. وهذا يضمن استخدام النوع الصحيح لكل نوع تقرير.

نهج بديل

بالنسبة لتحليل JSON الديناميكي، يمكنك استخدام وظيفة غير تنظيمية عامة:

func unmarshalAny[T any](bytes []byte) (*T, error) {
    out := new(T)
    if err := json.Unmarshal(bytes, out); err != nil {
        return nil, err
    }
    return out, nil
}

على الرغم من أن هذه الوظيفة توفر المرونة، فمن الضروري ملاحظة أنه إذا كان تنفيذها في حده الأدنى، فإنها تؤدي فقط نفس الإجراءات مثل تضمين منطق إلغاء التنظيم مباشرةً. وبالتالي، فإن استخدام هذه الوظيفة يكون مبررًا فقط إذا كانت تقدم منطقًا إضافيًا.

باختصار، فكر بعناية في ضرورة الأدوية العامة عند العمل مع الأنواع الملموسة وإلغاء تنظيم JSON. اختر حلاً قائمًا على التبديل عند الضرورة دون المساس بسلامة النوع، وتوخي الحذر عند استخدام وظائف عامة تكرر الوظائف دون داع.

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

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

Copyright© 2022 湘ICP备2022001581号-3