Asserzioni di tipo
Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 17 di 68.
Quando lavori con le variabili di interfaccia, spesso devi accedere al valore concreto effettivamente memorizzato al loro interno. È qui che entrano in gioco le asserzioni di tipo: ti permettono di estrarre e usare in sicurezza il valore sottostante.
Un'asserzione di tipo usa questa sintassi: value, ok := interfaceVariable.(Type). Il primo valore restituito è il valore estratto del tipo specificato, e il secondo è un booleano che ti dice se l'asserzione è riuscita.
var data interface{} = 42
number, ok := data.(int)
if ok {
fmt.Println("It's an integer:", number)
} else {
fmt.Println("Not an integer")
}La variabile ok è fondamentale per la sicurezza. Se provi ad asserire il tipo sbagliato, ok sarà false e value sarà il valore zero di quel tipo. Senza controllare ok, un'asserzione di tipo non riuscita causerebbe il panic del programma.
Le asserzioni di tipo sono essenziali quando lavori con valori interface{}, perché ti permettono di convertire l'interfaccia generica nel tipo specifico, così da poterne usare i metodi e le operazioni.
Sfida
FacileIn questa sfida, ti eserciterai a usare le asserzioni di tipo per estrarre in sicurezza valori concreti dalle variabili di interfaccia e lavorarci. Creerai un analizzatore di dati che elabora diversi tipi di valori memorizzati in interfacce vuote.
Riceverai due input:
- Una stringa che rappresenta il tipo di dato da verificare (ad es.
"int","string"o"bool") - Una stringa che rappresenta il valore effettivo (ad es.
"42","hello"o"true")
Il tuo compito è:
- Convertire la stringa del valore nel tipo Go appropriato e memorizzarla in una variabile
interface{}:- Per
"int": convertire in intero - Per
"string": usare come stringa - Per
"bool": convertire in booleano
- Per
- Usare un'asserzione di tipo per verificare se la variabile di interfaccia contiene il tipo previsto specificato nel primo input
- Se l'asserzione di tipo ha esito positivo, stampare:
"Success: [value] is a [type]" - Se l'asserzione di tipo ha esito negativo, stampare:
"Failed: value is not a [type]"
Devi usare la sintassi sicura dell'asserzione di tipo con la variabile ok per verificare se l'asserzione è riuscita. La sfida verifica la tua comprensione di come estrarre in sicurezza valori concreti dalle variabili di interfaccia senza causare il panic del programma.
Per la conversione booleana, "true" deve essere convertito in true e qualsiasi altra stringa deve essere convertita in false. Usa il pacchetto strconv per convertire una stringa in un intero.
Provalo tu
package main
import (
"fmt"
"strconv"
)
func main() {
// Leggi l'input
var dataType string
var valueStr string
fmt.Scanln(&dataType)
fmt.Scanln(&valueStr)
// Variabile per memorizzare il valore dell'interfaccia
var interfaceValue interface{}
// TODO: Scrivi il tuo codice qui sotto
// 1. Converti valueStr nel tipo appropriato in base a dataType e memorizzalo in interfaceValue
// 2. Usa un'asserzione di tipo per verificare se interfaceValue contiene il tipo previsto
// 3. Stampa il messaggio appropriato di successo o errore
}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