Syntaxe étrange de Go : que signifient les parenthèses avant le nom de la fonction ?
Bonjour à tous ! Je viens de commencer à apprendre Go après Python et JavaScript, et une particularité syntaxique me trouble. Dans le code, je vois souvent quelque chose comme ceci :
```go
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
```
Pourquoi y a-t-il des parenthèses avec `(r Rectangle)` avant le nom de la fonction `Area` ? En Python, j'écrirais simplement `def area(self):`. Je comprends que cela a un rapport avec les méthodes des structures, mais je n'arrive pas à saisir la logique.
Voici un autre exemple qui m'a embrouillé :
```go
func (p *Person) SetName(name string) {
p.Name = name
}
```
Pourquoi écrit-on parfois `(p *Person)` et parfois `(p Person)` ? Et que se passerait-il si je supprimais complètement ces parenthèses ? Par exemple :
```go
func Area() float64 {
return 0
}
```
Cela fonctionne aussi. Quand faut-il utiliser cette syntaxe et quand non ? Expliquez-moi, s'il vous plaît, comme à un débutant. J'ai l'impression d'avoir raté un concept fondamental de Go. Merci d'avance pour votre aide.