Menu
Coddy logo textTech

Definire metodi sugli struct

Fa parte della sezione Programmazione orientata agli oggetti del percorso GO di Coddy. Lezione 7 di 107.

I metodi in Go sono funzioni con un argomento speciale ricevitore che associa la funzione a un tipo di struct.

Sintassi dei metodi

func (receiverName StructType) MethodName() ReturnType {
    // corpo del metodo
}

Definisci una struct con metodi

type Rectangle struct {
    Width  float64
    Height float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func (r Rectangle) Perimeter() float64 {
    return 2 * (r.Width + r.Height)
}

Metodi con parametri

func (r Rectangle) Scale(factor float64) float64 {
    return r.Area() * factor
}

Chiamare i metodi

rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area())      // Risultato: 15
fmt.Println(rect.Perimeter()) // Risultato: 16
fmt.Println(rect.Scale(2))    // Risultato: 30

Il ricevitore (r Rectangle) ti permette di accedere ai campi della struct all'interno del metodo usando la variabile ricevitore r. I metodi possono chiamare altri metodi sulla stessa struct.

challenge icon

Sfida

Medio

Aggiungi tre metodi alla struct Circle:

  • Area: restituisce math.Pi * radius * radius
  • Circumference: restituisce 2 * math.Pi * radius
  • Describe: restituisce una stringa: "Circle with radius X.XX"

Provalo tu

package main

import "fmt"

func main() {
    var radius float64
    fmt.Scan(&radius)

    c := Circle{Radius: radius}

    fmt.Printf("Area: %.2f\n", c.Area())
    fmt.Printf("Circumference: %.2f\n", c.Circumference())
    fmt.Printf("Description: %s\n", c.Describe())
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Go online