AnyCompiler

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())
}
Output
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)
}
Output
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().