Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

In 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 è:

  1. 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
  2. Usare un'asserzione di tipo per verificare se la variabile di interfaccia contiene il tipo previsto specificato nel primo input
  3. Se l'asserzione di tipo ha esito positivo, stampare: "Success: [value] is a [type]"
  4. 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
	
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Go online