Go by Example: Methods

Go soporta métodos definidos en tipos de estructuras (structs).

package main
import "fmt"
type rect struct {
    width, height int
}

Este método area tiene un tipo receptor de *rect.

func (r *rect) area() int {
    return r.width * r.height
}

Los métodos pueden ser definidos para tipos de receptores tanto de puntero como de valor. Aquí hay un ejemplo de un receptor de valor.

func (r rect) perim() int {
    return 2*r.width + 2*r.height
}
func main() {
    r := rect{width: 10, height: 5}

Aquí llamamos a los 2 métodos definidos para nuestra estructura.

    fmt.Println("area: ", r.area())
    fmt.Println("perim:", r.perim())

Go maneja automáticamente la conversión entre valores y punteros para llamadas a métodos. Puedes querer usar un tipo de receptor de puntero para evitar copiar en llamadas a métodos o para permitir que el método mute la estructura receptora.

    rp := &r
    fmt.Println("area: ", rp.area())
    fmt.Println("perim:", rp.perim())
}
$ go run methods.go 
area:  50
perim: 30
area:  50
perim: 30

A continuación, veremos el mecanismo de Go para agrupar y nombrar conjuntos relacionados de métodos: interfaces.

Siguiente ejemplo: Interfaces.