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

كيفية إضافة أزواج متعددة ذات قيمة رئيسية إلى سياق Go بكفاءة: المكالمات الفردية مقابل المكالمات المتعددة؟

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

How to Add Multiple Key-Value Pairs to a Go Context Efficiently: Single vs. Multiple Calls?

إضافات زوج القيمة الرئيسية في السياق. مع القيمة: إضافات فردية مقابل إضافات متعددة

حزمة سياق In Go، context.WithValue يسمح بـ إضافة بيانات خاصة بالطلب إلى مكدس معالجة الطلب. ومع ذلك، عند التعامل مع أزواج متعددة من المفاتيح والقيمة، لا يكون النهج الأمثل واضحًا على الفور.

استدعاءات متعددة لـ WithValue()

أحد الخيارات هو استدعاء WithValue( ) عدة مرات، مع إضافة كل زوج من أزواج المفاتيح والقيمة بشكل تدريجي إلى السياق. في حين أن هذه الطريقة واضحة ومباشرة، إلا أنها يمكن أن تصبح مرهقة لعدد كبير من الأزواج.

استخدام البنية

البديل هو استخدام بنية تحتوي على جميع العناصر. أزواج القيمة الرئيسية، مما يقلل استدعاءات WithValue() إلى واحد. ومع ذلك، يمكن أن يؤدي هذا الأسلوب إلى نسخ غير ضروري للبيانات.

الحل القائم على الخريطة

لتحسين الأداء لعمليات البحث السريعة عن القيمة الرئيسية، فكر في استخدام خريطة وإضافتها كقيمة واحدة للسياق. وهذا يسمح بالوصول الفعال لـ O(1) إلى القيم الفردية.

النهج الهجين

يجمع الحل المختلط بين فوائد كلا النهجين. قم بإنشاء بنية مجمعة تخفي خريطة غير مُصدرة وتوفر طريقة getter. من خلال إضافة بنية الغلاف فقط إلى السياق، يتم الحفاظ على الوصول المتزامن، وتقليل نسخ البيانات، والحفاظ على عمليات البحث السريعة عن قيمة المفتاح.

مثال: الحل الهجين

type Values struct {
    m map[string]string
}

func (v Values) Get(key string) string {
    return v.m[key]
}
v := Values{map[string]string{
    "1": "one",
    "2": "two",
}}

c := context.Background()
c2 := context.WithValue(c, "myvalues", v)

fmt.Println(c2.Value("myvalues").(Values).Get("2"))

الاستنتاج

الطريقة المثلى لإضافة مفاتيح متعددة تعتمد أزواج القيمة في السياق على المتطلبات المحددة للتطبيق. بالنسبة للمواقف التي يكون فيها الأداء أمرًا بالغ الأهمية وتكون عمليات البحث السريعة عن قيمة المفتاح ضرورية، فإن النهج القائم على الخريطة أو النهج المختلط هو الأكثر ملاءمة. بالنسبة للسيناريوهات الأقل حساسية للأداء أو مع عدد محدود من أزواج القيمة الرئيسية، قد تكون الاستدعاءات المتعددة إلى WithValue() أو استخدام البنية كافية.

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

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

Copyright© 2022 湘ICP备2022001581号-3