بناء جملة Go الغريب: ماذا تعني الأقواس قبل اسم الدالة؟
مرحبًا بالجميع! لقد بدأت للتو في تعلم Go بعد Python وJavaScript، ويحيرني أحد جوانب بناء الجملة. في الكود، أرى غالبًا شيئًا كهذا:
```go
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
```
لماذا توجد أقواس مع `(r Rectangle)` قبل اسم الدالة `Area`؟ في Python، كنت سأكتب ببساطة `def area(self):`. أفهم أن هذا له علاقة بطُرق الهياكل (struct methods)، لكني لا أستطيع فهم المنطق.
إليك مثال آخر حيرني:
```go
func (p *Person) SetName(name string) {
p.Name = name
}
```
لماذا نكتب أحيانًا `(p *Person)` وأحيانًا `(p Person)`؟ وماذا سيحدث إذا أزلت هذه الأقواس تمامًا؟ على سبيل المثال:
```go
func Area() float64 {
return 0
}
```
هذا أيضًا يعمل. متى يجب استخدام هذا البناء، ومتى لا؟ اشرح لي، من فضلك، كما لو كنت مبتدئًا. أشعر أنني فاتني مفهوم أساسي في Go. شكرًا مقدمًا على المساعدة.