Avatar ·

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.