Avatar ·

ماذا يعني interface{} في Go وكيفية استخدامه بشكل صحيح؟

مرحباً بالجميع! لقد بدأت للتو في تعلم Go، ويحيرني التركيب `interface{}`. أراه في كل مكان: في الدوال، في هياكل البيانات، في الوسائط. على سبيل المثال، رأيت هذا الكود: ```go func PrintAnything(v interface{}) { fmt.Println(v) } func main() { PrintAnything(42) PrintAnything("hello") PrintAnything([]int{1,2,3}) } ``` أفهم أنه نوع من "الواجهة الفارغة"، لكنني لا أستوعب معناه بالكامل. هل يعني أن `interface{}` يمكنه تخزين قيمة من أي نوع؟ ولكن كيف يختلف هذا عن `Object` في Java أو `void*` في C؟ وإذا مررت دالة `interface{}`، كيف يمكنني استرجاع النوع الأصلي لاحقاً؟ أيضاً، أرى كثيراً تصريحات مثل `map[string]interface{}` أو `[]interface{}`. هل يعني هذا أنه يمكنني تخزين سلاسل وأرقام وهياكل في نفس الـ slice؟ ألن يؤدي هذا إلى مشاكل أثناء التنفيذ؟ من فضلك، اشرح بالأمثلة: ما هو `interface{}` في الواقع، لماذا هو مطلوب، وكيفية التعامل معه دون ألم. يهمني بشكل خاص