Avatar ·

هل يوجد في Go تحميل زائد للدوال والطرق كما في Java/C++؟

مرحباً بالجميع! لقد بدأت للتو في تعلم Go بعد Java، وواجهت موقفاً غير مفهوم. في Java اعتدت على إمكانية تعريف عدة دوال بنفس الاسم ولكن بمعاملات مختلفة - وهذا يسمى التحميل الزائد (overloading). على سبيل المثال، يمكنني كتابة: ```java void print(String s) { ... } void print(int i) { ... } void print(double d) { ... } ``` الآن أحاول فعل الشيء نفسه في Go: ```go package main func print(s string) { fmt.Println(s) } func print(i int) { fmt.Println(i) } func main() { print("hello") print(42) } ``` لكن المترجم يعطي خطأ: `print redeclared in this block`. لقد جربت إعادة تسمية الحزمة وتغيير ترتيب الدوال - لم يساعد شيء. قرأت أنه لا يوجد في Go تحميل زائد تقليدي، لكن هذا يبدو قيداً غريباً جداً. كيف إذن يمكنني التعامل إذا كنت بحاجة لدالة تعمل مع أنواع بيانات مختلفة؟ هل يجب حقاً أن أخترع اسماً فريداً لكل نوع؟ هذا ينتهك مبدأ DRY ويجعل الكود...