Sintaxe estranha do Go: o que significam os parênteses antes do nome da função?
Olá a todos! Comecei a estudar Go recentemente, depois de Python e JavaScript, e uma característica da sintaxe me confunde. No código, vejo frequentemente algo assim:
```go
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
```
Por que antes do nome da função `Area` há parênteses com `(r Rectangle)`? Em Python, eu escreveria simplesmente `def area(self):`. Entendo que isso tem a ver com métodos de structs, mas não consigo entender a lógica.
Aqui está outro exemplo que me confundiu:
```go
func (p *Person) SetName(name string) {
p.Name = name
}
```
Por que às vezes escrevem `(p *Person)` e outras vezes `(p Person)`? E o que acontece se eu simplesmente remover esses parênteses? Por exemplo:
```go
func Area() float64 {
return 0
}
```
Isso também funciona. Quando devo usar essa sintaxe e quando não? Expliquem, por favor, como para um iniciante. Parece que perdi algum conceito fundamental do Go. Agradeço desde já pela ajuda.