Metodi
#
// Go permette l'utilizzo dei <a href="https://it.wikipedia.org/wiki/Metodo_(programmazione)"><em>metodi</em></a>
// definiti su tipi all'interno di uno stesso package.
package main
import "fmt"
type rect struct {
width, height int
}
// Questo metodo `area` ha un _receiver type_ `*rect`.
func (r *rect) area() int {
return r.width * r.height
}
// I metodi possono essere definiti o per un puntatore
// o per semplicemente un valore. Ecco un esempio di
// metodo con il _receiver type_ valore.
func (r rect) perim() int {
return 2*r.width + 2*r.height
}
func main() {
r := rect{width: 10, height: 5}
// Qui chiamiamo i 2 metodi definiti per la nostra struct.
fmt.Println("area: ", r.area())
fmt.Println("perim:", r.perim())
// Le conversioni tra puntatori e valori per le
// chiamate a metodi vengono effettuate
// automaticamente da Go. Potresti voler usare un
// puntatore come receiver type per evitare di copiare
// nelle chiamate al metodo o per permettere al metodo
// di modificare il valore originale della variabile.
rp := &r
fmt.Println("area: ", rp.area())
fmt.Println("perim:", rp.perim())
}
$ go run methods.go
area: 50
perim: 30
area: 50
perim: 30
# Successivamente daremo un'occhiata al modo in Go
# per raggruppare e dare un nome a collezioni di metodi:
# le interfacce.