Implementare un’interfaccia
Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 14 di 68.
Ora che sai come definire un'interfaccia, impariamo come i tipi Go le implementano effettivamente. La cosa più importante da capire è che Go usa l'implementazione implicita: non serve alcuna parola chiave o dichiarazione speciale.
Se un tipo ha tutti i metodi richiesti da un'interfaccia, la soddisfa automaticamente. Non è necessario dichiarare esplicitamente che il proprio tipo implementa l'interfaccia: Go lo deduce automaticamente.
Ecco come funziona con l'interfaccia Shaper della lezione precedente:
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14159 * c.Radius * c.Radius
}Poiché il tipo Circle ha un metodo Area() che restituisce un float64, implementa automaticamente l’interfaccia Shaper. Non è necessario dichiarare esplicitamente questa relazione: Go la riconosce in base alla corrispondenza delle firme dei metodi.
Questo approccio implicito rende le interfacce Go incredibilmente flessibili. Qualsiasi tipo esistente può soddisfare una nuova interfaccia, purché abbia i metodi richiesti, anche se l’interfaccia è stata creata dopo che il tipo è stato scritto.
Sfida
FacileIn questa sfida, ti eserciterai a implementare un’interfaccia creando un semplice sistema di veicoli. Creerai una struct Car che implementa automaticamente un’interfaccia Vehicle grazie all’implementazione implicita di Go.
Riceverai due input:
- Una stringa che rappresenta la marca dell’auto (ad es.,
"Toyota") - Una stringa che rappresenta la velocità dell’auto in km/h (ad es.,
"120")
Il tuo compito è:
- Definire un’interfaccia
Vehiclecon la firma di un metodo:GetInfo()che restituisce una stringa - Definire una struct
Carcon due campi:Brand(stringa) eSpeed(int) - Implementare il metodo
GetInfo()per la structCar, in modo che restituisca una stringa nel formato:"Brand: [brand], Speed: [speed] km/h" - Analizzare gli input per creare un’istanza di
Car - Chiamare il metodo
GetInfo()e stampare il risultato
Ricorda che in Go la struct Car implementerà automaticamente l’interfaccia Vehicle perché dispone del metodo richiesto GetInfo() con la firma corretta. Non è necessario dichiarare esplicitamente che Car implementa Vehicle: Go riconosce implicitamente questa relazione.
Provalo tu
package main
import (
"fmt"
"strconv"
)
// TODO: 1. Definisci l'interfaccia Vehicle con un metodo GetInfo() che restituisce una string
// TODO: 2. Definisci la struct Car con i campi Brand (string) e Speed (int)
// TODO: 3. Implementa il metodo GetInfo() per Car
func main() {
// Leggi l'input
var brand string
var speedStr string
fmt.Scanln(&brand)
fmt.Scanln(&speedStr)
// Converti la stringa speed in un intero
speed, _ := strconv.Atoi(speedStr)
// TODO: 4. Crea un'istanza di Car usando brand e speed, poi chiama GetInfo()
result := "" // sostituisci questa riga con la tua implementazione
_ = brand
_ = speed
// Visualizza il risultato
fmt.Println(result)
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
Switch con `fallthrough`Uscire dai cicli annidatiContinuare un ciclo specificoL'istruzione `goto`Riepilogo - Controllo avanzato dei cicli4Progetto: semplice lista di attività
Configurazione del progettoAggiungere un’attività2Struct e metodi
Definire metodi sugli structReceiver per valoreReceiver con puntatoreScegliere i receiverMetodi vs funzioniRiepilogo - comportamento degli struct5Mappe in dettaglio
Mappe di structPuntatori come valori delle mappeVerificare le mappe nilConfrontare le mappeRiepilogo - Contatore della frequenza delle parole3Interfacce (le basi)
Che cos’è un’interfaccia?Definire un’interfacciaImplementare un’interfacciaUsare i tipi interfacciaInterfaccia vuotaAsserzioni di tipoSwitch di tipoRiepilogo: forme e comportamentiEsercitati da solo: Compilatore Go online