Avatar ·

ماذا تعني الأقواس قبل اسم الدالة في Go؟

مرحباً بالجميع! بدأت تعلم Go مؤخراً، ويُربكني كثيراً تركيب (syntax) تعريف الدوال. أنا معتاد على Python حيث كل شيء بسيط: `def func_name(args):`. لكن في Go أرى تراكيب غريبة. على سبيل المثال، صادفت هذا الكود: ```go type Rectangle struct { Width float64 Height float64 } func (r Rectangle) Area() float64 { return r.Width * r.Height } ``` ما هذا `(r Rectangle)` قبل اسم الدالة `Area`؟ كنت أعتقد أن المعاملات (parameters) تُكتب بين قوسين دائريين بعد اسم الدالة، كما في اللغات الأخرى. لكنها هنا قبل الاسم. هل هذا تركيب خاص؟ حاولت كتابة `func Area(r Rectangle) float64` فقط — وهذا يعمل، لكنني لا أستطيع استدعاء الطريقة (method) كـ `rect.Area()`، بل فقط `Area(rect)`. ما الفرق؟ متى نستخدم الأقواس قبل الاسم ومتى بعدها؟ وما هو "المستقبل" (receiver)؟ سمعت هذا المصطلح لكنني لا أفهم لماذا هو مطلوب. أرجو التوضيح لمبتدئ. شكراً مقدماً!