ماذا تعني الأقواس قبل اسم الدالة في 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)؟ سمعت هذا المصطلح لكنني لا أفهم لماذا هو مطلوب.
أرجو التوضيح لمبتدئ. شكراً مقدماً!