Methods
Un method es una función con un receiver — un parámetro extra antes del nombre de la función que lo vincula a un tipo específico. func (r Rectangle) Area() se lee como una función normal, pero r.Area() se puede llamar directamente sobre cualquier valor de Rectangle.
package main
import "fmt"
type Rectangle struct {
Width, Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func main() {
rect := Rectangle{Width: 10, Height: 5}
fmt.Println("Area:", rect.Area())
}Area: 50
Pointer receivers para mutación
Un value receiver, como el de arriba, recibe una copia del struct — los cambios dentro del method no afectan al original. Un pointer receiver, func (c *Counter), opera en cambio sobre el valor original real, que es cómo un method puede realmente modificar el estado de su receiver.
package main
import "fmt"
type Counter struct {
Value int
}
func (c *Counter) Increment() {
c.Value++
}
func main() {
counter := Counter{Value: 0}
counter.Increment()
counter.Increment()
fmt.Println(counter.Value)
}2
Siguiente: interfaces — la forma implícita y duck-typed de Go de describir comportamiento compartido.
Practice exercise
Define un struct Circle con el campo Radius float64. Agrega un method Area() float64 que devuelva 3.14159 * c.Radius * c.Radius. Crea un Circle con Radius 2, luego imprime circle.Area().