لماذا لا يوجد نوع بيانات "مجموعة" (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` منفصل إلى المكتبة القياسية؟ هل هناك