Definire un’interfaccia
Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 13 di 68.
Ora che hai capito cosa sono concettualmente le interfacce, impariamo come definirne una concretamente in Go. Un'interfaccia si definisce usando la parola chiave interface seguita da un insieme di firme dei metodi racchiuse tra parentesi graffe.
Ecco la sintassi di base per definire un'interfaccia:
type InterfaceName interface {
MethodName() ReturnType
AnotherMethod(parameter Type) ReturnType
}Nota che un'interfaccia contiene solo le firme dei metodi: il nome del metodo, i parametri e i tipi restituiti, ma nessuna implementazione. L'interfaccia non specifica come debbano funzionare questi metodi, ma solo quali metodi devono esistere.
Ad esempio, ecco come definiresti una semplice interfaccia Shaper che richiede a qualsiasi tipo che la implementi di avere un metodo Area:
type Shaper interface {
Area() float64
}Questa interfaccia stabilisce un contratto: qualsiasi tipo che voglia essere considerato uno Shaper deve avere un metodo Area che non accetta parametri e restituisce un float64. All’interfaccia non importa quale sia il tipo o come calcoli l’area: le importa solo che il metodo esista con la firma corretta.
Sfida
FacileIn questa sfida, ti eserciterai a definire interfacce in Go creando un semplice sistema di riproduzione multimediale. Definirai un'interfaccia che stabilisce un contratto per diversi tipi di dispositivi multimediali.
Riceverai un input:
- Una stringa che rappresenta un'azione multimediale (ad es.
"play","pause"oppure"stop")
Il tuo compito è:
- Definire un'interfaccia chiamata
MediaPlayercon tre firme di metodo:Play()che restituisce una stringaPause()che restituisce una stringaStop()che restituisce una stringa
- In base all'azione di input, stampare la firma del metodo corrispondente della tua interfaccia
MediaPlayernel formato:"MediaPlayer interface requires: [MethodName]() string"
L'istruzione di stampa serve a descrivere l'interfaccia che hai definito sopra. Stai indicando quale firma di metodo richiede l'interfaccia MediaPlayer per l'azione specificata. Immagina che il tuo programma esamini e riporti il proprio contratto d'interfaccia.
I nomi dei metodi devono iniziare con una lettera maiuscola (essere esportati), perché fanno parte della definizione di un'interfaccia. Per l'input "play", stampa "MediaPlayer interface requires: Play() string", per "pause" stampa "MediaPlayer interface requires: Pause() string" e per "stop" stampa "MediaPlayer interface requires: Stop() string".
Questa sfida si concentra sul concetto fondamentale di definire interfacce con firme di metodo, stabilendo il contratto che ogni tipo che le implementa deve soddisfare.
Provalo tu
package main
import "fmt"
func main() {
// Leggi l'input
var action string
fmt.Scanln(&action)
// TODO: Definisci qui l'interfaccia MediaPlayer
// TODO: Scrivi il codice qui sotto per gestire l'azione e stampare l'output richiesto
// Stampa il risultato
// Ricorda di stampare nel formato: "MediaPlayer interface requires: [MethodName]() string"
}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