Sobes.tech
Junior — Middle

Come viene implementata la struttura orientata agli oggetti nel linguaggio Go e come si differenzia da quella classica?

sobes.tech AI

Risposta dell'AI

In Go, la programmazione orientata agli oggetti è implementata tramite composizione e interfacce, anziché tramite classi e ereditarietà, come nella OOP classica.

Le principali differenze:

  • Assenza di classi: In Go non ci sono classi, al loro posto si usano strutture (struct) che contengono campi e metodi.
  • Composizione invece di ereditarietà: Invece di ereditare strutture, si può includere una struttura in un'altra, permettendo il riutilizzo del codice.
  • Interfacce: Le interfacce in Go definiscono un insieme di metodi che una struttura deve implementare. I tipi implementano automaticamente l'interfaccia se hanno i metodi necessari, senza dichiarazioni esplicite.

Esempio:

package main
import "fmt"

type Animal interface {
    Speak() string
}

type Dog struct {}

func (d Dog) Speak() string {
    return "Woof!"
}

type Cat struct {}

func (c Cat) Speak() string {
    return "Meow!"
}

func main() {
    animals := []Animal{Dog{}, Cat{}}
    for _, a := range animals {
        fmt.Println(a.Speak())
    }
}

In questo modo, Go offre un modello di programmazione orientata agli oggetti più semplice e flessibile, basato su interfacce e composizione, senza le complessità dell'ereditarietà classica.