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

كيفية دمج نفس النوع من هيكل GO؟ طريقة تشفير JSON

نشر في 2025-04-16
تصفح:542

How Can I Efficiently Merge Go Structs of the Same Type Using JSON Encoding?

دمج حقول من الهياكل المتطابقة مع تشفير JSON

في عالم البرمجة GO ، وتشتاق مهمة دمج حقول من هيكلين من نفس النوع. فكر في سيناريو حيث يكون لديك تكوين افتراضي ، مثل:

type Config struct {
  path string
  id   string
  key  string
  addr string
  size uint64
}

var DefaultConfig = Config{"", "", "", "", 0}

وتكوين تم تحميله من ملف ، مثل:

القيم من كلا الهيكلين ، مع FileConfig فوق أي قيم في DefaultConfig. ومع ذلك ، قد لا تحتوي fileConfig على جميع الحقول. ب: = عكس. o: = refles.valueof (file) .elem () لأني: = 0 ؛ أنا var FileConfig = Config{"", "file_id", "", "file_addr", 0} ومع ذلك ، في هذه الحالة ، ليس الانعكاس حلًا مثاليًا. تتمثل المقاربة الأكثر أناقة في الاستفادة من قوة حزمة الترميز/JSON. باستخدام هذه التقنية ، يمكنك دمج تكويناتك بأناقة:

استيراد ( "الترميز/JSON" "سلاسل" ) const fileContent = `{" id ":" file_id "،" addr ":" file_addr "،" size ": 100}` func unmarshalconfig (conf *config ، content string) خطأ { return json.newdecoder (strings.newreader (content)). decode (conf) } func mergeconfigs (defconfig *config ، fileconfig *config) خطأ { إذا err: = unmarshalConfig (defconfig ، fileContent) ؛ err! = nil { إرجاع خطأ } لـ _ ، v: = range fileconfig { defconfig [v.key] = v.value } العودة لا شيء }

في هذا الحل ، لا يتم تشكيل fileConfig في التكوين الافتراضي. تتولى حزمة الترميز/JSON جميع تعقيدات ضبط قيم الحقل ، بما في ذلك القيم المفقودة (والتي ستؤدي إلى افتراضي لقيمتها صفر) والقيم المحددة للملفات التي تتجاوز القيم الافتراضية.
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3