Sintaxis extraña de Go: ¿qué significan los paréntesis antes del nombre de la función?
¡Hola a todos! Acabo de empezar a aprender Go después de Python y JavaScript, y me confunde una característica de la sintaxis. En el código, a menudo veo algo como esto:
```go
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
```
¿Por qué antes del nombre de la función `Area` hay paréntesis con `(r Rectangle)`? En Python, simplemente escribiría `def area(self):`. Entiendo que esto está relacionado con los métodos de las structs, pero no puedo entender la lógica.
Aquí hay otro ejemplo que me confundió:
```go
func (p *Person) SetName(name string) {
p.Name = name
}
```
¿Por qué a veces se escribe `(p *Person)` y otras veces `(p Person)`? ¿Y qué pasaría si elimino esos paréntesis por completo? Por ejemplo:
```go
func Area() float64 {
return 0
}
```
Esto también funciona. ¿Cuándo se debe usar esta sintaxis y cuándo no? Explíquenme, por favor, como a un principiante. Siento que me he perdido algún concepto fundamental de Go. Gracias de antemano por la ayuda.