Interfaccia vuota
Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 16 di 68.
Finora hai lavorato con interfacce che richiedono metodi specifici, ma Go ha un’interfaccia speciale incredibilmente flessibile: l’interfaccia vuota, scritta come interface{}.
L’interfaccia vuota non richiede alcun metodo, il che significa che qualsiasi tipo in Go la soddisfa automaticamente. Poiché ogni tipo implementa zero metodi (come minimo), a qualsiasi tipo può essere assegnata una variabile interface{}:
var anything interface{}
anything = 42 // int
anything = "hello" // string
anything = true // bool
anything = []int{1, 2, 3} // sliceQuesto rende interface{} estremamente utile quando devi lavorare con dati di tipo sconosciuto o variabile. Potresti incontrare questa situazione leggendo file di configurazione, gestendo input dell'utente o lavorando con API che restituiscono tipi di dati diversi a seconda della situazione.
Tuttavia, poiché l’interfaccia vuota può contenere qualsiasi tipo, spesso dovrai determinare quale tipo è effettivamente memorizzato al suo interno prima di poter usare il valore in modo significativo. È qui che le asserzioni di tipo e gli switch di tipo (che imparerai nella prossima lezione) diventano strumenti essenziali per lavorare in sicurezza con i valori interface{}.
Sfida
FacileIn questa sfida, farai pratica con l'interfaccia vuota creando un elaboratore di dati in grado di gestire diversi tipi di valori. Creerai una funzione che accetta un parametro interface{} ed elabora vari tipi di dati.
Riceverai due input:
- Una stringa che rappresenta il tipo di dati (ad es.
"int","string","bool"oppure"slice") - Una stringa che rappresenta il valore effettivo (ad es.
"42","hello","true"oppure"1,2,3")
Il tuo compito è:
- Creare una funzione chiamata
processDatache accetta un parametrointerface{}e stampa informazioni sul valore - In base all'input del tipo di dati, convertire la stringa del valore nel tipo Go appropriato:
- Per
"int": convertire in intero - Per
"string": usare come stringa - Per
"bool": convertire in booleano - Per
"slice": convertire i valori separati da virgole in uno slice di interi
- Per
- Chiamare la funzione
processDatacon il valore convertito - All'interno di
processData, stampare il valore e il suo tipo nel formato:"Value: [value], Type: [type]"
Per l'input slice, la stringa separata da virgole come "1,2,3" deve essere convertita in []int{1, 2, 3}. La funzione dovrebbe funzionare con qualsiasi tipo, poiché accetta interface{}, dimostrando come l'interfaccia vuota possa contenere valori di qualsiasi tipo. Usa fmt.Printf con i verbi di formattazione %v e %T per visualizzare rispettivamente il valore e il tipo.
Provalo tu
package main
import (
"fmt"
)
func main() {
// Leggi l'input
var dataType string
var valueStr string
fmt.Scanln(&dataType)
fmt.Scanln(&valueStr)
// TODO: Scrivi il tuo codice qui sotto
// 1. Crea la funzione processData che accetta interface{}
// 2. Converti valueStr nel tipo appropriato in base a dataType
// 3. Chiama processData con il valore convertito
}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