لماذا لا توجد بنية بيانات 'مجموعة' (set) مدمجة في Go وكيفية تنفيذها؟
مرحبًا بالجميع! أنا مبتدئ في Go، انتقلت من Python، ويحيرني كثيرًا عدم وجود نوع بيانات 'مجموعة' (set) مدمج. في Python، كنت أستخدم set باستمرار للتحقق السريع من تفرد العناصر، وإزالة التكرارات من الشرائح (slices)، والتحقق من التقاطعات. على سبيل المثال:
```go
// كيف يمكنني فعل هذا في Go؟
uniqueNames := []string{}
seen := set() // هذا غير موجود!
for _, name := range names {
if !seen.Contains(name) {
seen.Add(name)
uniqueNames = append(uniqueNames, name)
}
}
```
أفهم أنه يمكن استخدام map[string]bool أو map[string]struct{}، لكن هذا يبدو كحل مؤقت. لماذا لم يضف مطورو Go set عادي إلى المكتبة القياسية؟ فهي بنية بيانات أساسية موجودة في جميع اللغات الحديثة تقريبًا.
ربما أفتقد شيئًا؟ هل هناك طريقة أصيلة (idiomatic) للعمل مع المجموعات في Go دون إعادة اختراع العجلة؟ أم يجب علي كتابة التنفيذ الخاص بي في كل مرة؟ سأكون ممتنًا لأمثلة الكود وشرح الفلسفة.