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.