مقارنة قيم Go

المقارنة حسب النوع

أنواع البيانات الأساسية قابلة للمقارنة دائمًا باستخدام==و!=العاملين:عدد صحيحالقيم،النقطة العائمةأعداد،مركبأعداد،قيمة منطقيةالقيم،خيطالقيم،مستمرالقيم.

مجموعة مصفوفةالقيم قابلة للمقارنة ، إذا كانت تحتوي على نوع عنصر قابل للمقارنة

المؤشرالقيم قابلة للمقارنة.

قناةالقيم قابلة للمقارنة.

واجهه المستخدمالقيم قابلة للمقارنة.

المقارنةواجهه المستخدمتعمل القيم فقط إذا كان النوع الديناميكي قابلاً للمقارنة.

وظيفةالقيم،شريحةالقيم وخريطةالقيمليسقابلة للمقارنة ، لا يمكن مقارنتها إلا معnil، كحالة خاصة.

قواعد المقارنة

من مواصفات Go:

  • قيمة منطقيةالقيم قابلة للمقارنة. قيمتان منطقيتان متساويتان إذا كانا كلاهماtrueاو كلاهماfalse.

  • عدد صحيحالقيم قابلة للمقارنة ومرتبة بالطريقة المعتادة.

  • النقطة العائمةالقيم قابلة للمقارنة ومرتبة كما هو محدد بواسطةIEEE-754اساسي.

  • مركبالقيم قابلة للمقارنة. قيمتان مركبتان u و v متساويتان إذا كانا كلاهماreal(u) == real(v)andتخيل (ش) == تخيل (ت) `.

  • خيطالقيم قابلة للمقارنة ومرتبة ، معجمياً حسب البايت.

  • المؤشرالقيم قابلة للمقارنة. تكون قيمتا المؤشر متساويتين إذا كانتا تشيران إلى نفس المتغير أو إذا كان لكل منهما قيمةnil. قد تكون المؤشرات إلى المتغيرات المميزة ذات الحجم الصفري متساوية أو لا

  • قناةالقيم قابلة للمقارنة. تكون قيمتا القناة متساويتين إذا تم إنشاؤها بواسطة نفس الاستدعاء أو إذا كان لكل منهما قيمةnil.

  • واجهه المستخدمالقيم قابلة للمقارنة. تكون قيمتا الواجهة متساوية إذا كان لهما أنواع ديناميكية متطابقة وقيم ديناميكية متساوية أو إذا كان لكل منهما قيمةnil.

  • قيمة سغير واجهةاكتبXوقيمةtمنواجهه المستخدماكتبTقابلة للمقارنة عندما تكون القيم من النوعXقابلة للمقارنة وXالأدواتT. إذا كانوا متساويينtالنوع الديناميكي الخاص بـXوقيمة t الديناميكية تساويx.

  • هيكلالقيم قابلة للمقارنة إذا كانت جميع حقولها قابلة للمقارنة. تتساوى قيمتا البنية إذا تساوت الحقول غير الفارغة المقابلة.

  • مجموعة مصفوفةتكون القيم قابلة للمقارنة إذا كانت قيم نوع عنصر الصفيف قابلة للمقارنة. قيمتا صفيف متساويتان إذا كانت العناصر المقابلة لها متساوية.

فشل المقارنة

إذا احتوت البنية على حقل لا يمكن مقارنة نوعه ، فستتلقى خطأ وقت الترجمة عند المقارنة.

مقارنة أنواع لا مثيل لها: أدخلrefect.DeepEqual()

الreflectتوفر الحزمة stdlib ملفreflect.DeepEqual()دالة تأخذ نوعين ، وتعيد قيمة منطقية:

func DeepEqual(x, y interface{}) bool

لا تتساوى قيم الأنواع المميزة أبدًا بشكل كبير ، لذا إذا مررت بنوعين مختلفين ، فستحصل دائمًا على ذلكfalse.

مجموعة مصفوفةتتساوى القيم بشدة عندما تكون العناصر المقابلة لها متساوية تمامًا

هيكلتكون القيم متساوية تمامًا إذا كانت الحقول المقابلة لها متساوية تمامًا.

فونكالقيم متساوية تمامًا إذا كان كلاهما متساويًاnil؛ وإلا فهم ليسوا متساوين بشدة.

واجهه المستخدمالقيم متساوية بشكل كبير إذا كانت تحمل قيمًا ملموسة متساوية تمامًا

خريطةتتساوى القيم بشدة عندما يكون كل ما يلي صحيحًا: - كلاهماnilأو كلاهما غيرnil- لهما نفس الطول - هما نفس كائن الخريطة أو مفاتيحهما المقابلة (المتطابقة باستخدام Go المساواة) خريطة لقيم متساوية بعمق.

المؤشرالقيم متساوية تمامًا إذا كانت متساوية باستخدام Go==أو إذا كانت تشير إلى قيم متساوية بعمق.

شريحةتتساوى القيم بشدة عندما يكون كل ما يلي صحيحًا: - كلاهماnilأو كلاهما غيرnil- لها نفس الطول - تشير إلى نفس الإدخال الأولي لنفس المصفوفة الأساسية (أي ،&x[0] == &y[0]) أو العناصر المقابلة لها (حتى الطول) متساوية تمامًا.

شريحة فارغة غير معدومة وأnilشريحة (على سبيل المثال ،[]byte{}و[]byte(nil)) ليست متساوية بشكل كبير.

قيم أخرى -أعدادومنطقيةوسلاسل، والقنوات- تكون متساوية تمامًا إذا كانت متساوية باستخدام عامل التشغيل Go's ==.

بعض الحالات "الخاصة" التي لا مفر منها تستحق سردها:من الممكن أن تكون القيمة غير متساوية مع نفسها: - لانها منfuncاكتب - لأنها نقطة عائمةNaNالقيمة - لأنها ملفمجموعة مصفوفةوهيكل، أوواجهه المستخدمتحتوي على مثل هذه القيمة

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

الأمر نفسه ينطبق علىشرائحوخرائط: لوxوyهي نفس الشريحة أو نفس الخريطة ، فهما متساويان تمامًا بغض النظر عن المحتوى.


المزيد من دروس Go: