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

كيف يمكننا إنشاء وظائف عامة في Golang لأنواع البيانات المختلفة؟

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

 How Can We Create Generic Functions in Golang for Different Data Types?

معلمات الطريقة العامة في Golang

في Go، من المتطلبات الشائعة أن يكون لديك وظيفة تعمل على بيانات من أنواع مختلفة. لنأخذ على سبيل المثال دالة تحسب عدد العناصر في شريحة من نوع معين. كيف يمكن تصميم هذه الوظيفة للتعامل مع أي نوع من البيانات، وليس فقط النوع المحدد الذي تم تصميمها من أجله في البداية؟

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

خذ بعين الاعتبار المثال التالي، حيث نهدف إلى إنشاء وظيفة Count عامة تحسب عدد العناصر في شريحة:

func Count[T any](s []T) int {
  return len(s)
}

باستخدام مثل هذه الأدوية العامة، يمكننا تمرير شرائح من أي نوع إلى Count، مما يسمح لها بإحصاء العناصر ديناميكيًا بناءً على نوع الإدخال.

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

type Identifiable interface {
  GetID() int
}

func FindByID[T Identifiable](s []T, id int) *T {
  for i, v := range s {
    if v.GetID() == id {
      return &s[i]
    }
  }
  return nil
}

من خلال دمج الواجهات والأسماء العامة، نكتسب القدرة على إنشاء وظائف مرنة للغاية ويمكن أن تعمل بفعالية على البيانات من مختلف الأنواع.

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

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

Copyright© 2022 湘ICP备2022001581号-3