تحويل أنواع الشرائح من الواجهات في Go: لماذا لا يعمل هذا؟
مرحباً بالجميع! أنا مبتدئ في Go ولا أستطيع فهم تحويل الأنواع لشرائح الواجهات. لدي دالة تستقبل `[]interface{}`، لكني أريد تمرير شريحة من نوع محدد، مثل `[]string`. لماذا لا يسمح Go بذلك مباشرة؟
إليك مثال على الكود الذي لا يعمل معي:
```go
package main
import "fmt"
func printAll(items []interface{}) {
for _, item := range items {
fmt.Println(item)
}
}
func main() {
names := []string{"Alice", "Bob", "Charlie"}
// خطأ: cannot use names (type []string) as type []interface{} in argument to printAll
printAll(names)
}
```
أفهم أن `string` ينفذ الواجهة `interface{}`، لكن لماذا لا يمكن استخدام `[]string` كـ `[]interface{}`؟ في التوثيق مكتوب عن التباين المشترك (covariance)، لكني لا أفهم تماماً كيفية تطبيقه عملياً. أحتاج لتمرير أنواع مختلفة من الشرائح إلى دالة واحدة. كيف يمكن حل هذه المشكلة بشكل صحيح؟ ربما يجب استخدام...