Avatar ·

لماذا لا يوجد نوع بيانات "مجموعة" (Set) مدمج في Go وكيفية تنفيذه؟

مرحباً بالجميع! أنا مطور Go مبتدئ، انتقلت من Python، وواجهت مشكلة غير متوقعة. في Python كنت أستخدم `set()` باستمرار للتحقق من تفرد العناصر، وإزالة التكرارات من القائمة، والتحقق السريع من الوجود. على سبيل المثال: ```python my_list = [1, 2, 2, 3, 3, 4] unique = set(my_list) # {1, 2, 3, 4} if 3 in unique: # O(1) تحقق print("تم العثور!") ``` عندما بدأت الكتابة بلغة Go، توقعت العثور على شيء مشابه في المكتبة القياسية، لكن لدهشتي، لم يكن هناك نوع `Set` ولا Generics (حتى الإصدار 1.18). اضطررت لكتابة حلول بديلة: ```go // المحاولة 1: استخدام map seen := make(map[int]bool) items := []int{1, 2, 2, 3, 3, 4} for _, v := range items { seen[v] = true } // لكن هذا غير مريح - تحتاج للتحقق من ok، كثير الكلام ``` أفهم أنه يمكن محاكاة المجموعة عبر `map[T]struct{}`، لكن هذا يبدو كحل اختراقي. لماذا قرر مطورو Go عدم إضافة نوع `Set` منفصل إلى المكتبة القياسية؟ هل هناك