Avatar ·

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.