Menu
Coddy logo textTech

Assertions de type

Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 17 sur 68.

Lorsque vous travaillez avec des variables d'interface, vous avez souvent besoin d'accéder à la valeur concrète réelle stockée à l'intérieur. C'est là que les assertions de type interviennent : elles vous permettent d'extraire et d'utiliser la valeur sous-jacente en toute sécurité.

Une assertion de type utilise cette syntaxe : value, ok := interfaceVariable.(Type). La première valeur de retour est la valeur extraite du type spécifié, et la seconde est un booléen qui vous indique si l'assertion a réussi.

var data interface{} = 42

number, ok := data.(int)
if ok {
    fmt.Println("It's an integer:", number)
} else {
    fmt.Println("Not an integer")
}

La variable ok est cruciale pour la sécurité. Si vous essayez d'affirmer le mauvais type, ok sera false, et value sera la valeur zéro de ce type. Sans vérifier ok, une assertion de type échouée provoquerait un panic de votre programme.

Les assertions de type sont essentielles lors de l'utilisation de valeurs interface{}, vous permettant de convertir l'interface générique en un type spécifique afin de pouvoir utiliser ses méthodes et ses opérations.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

challenge icon

Défi

Facile

Dans ce défi, vous allez vous entraîner à utiliser les assertions de type pour extraire et manipuler en toute sécurité des valeurs concrètes à partir de variables d'interface. Vous allez créer un analyseur de données qui traite différents types de valeurs stockées dans des interfaces vides.

Vous recevrez deux entrées :

  • Une chaîne de caractères représentant le type de données à vérifier (par exemple, "int", "string", ou "bool")
  • Une chaîne de caractères représentant la valeur réelle (par exemple, "42", "hello", ou "true")

Votre tâche consiste à :

  1. Convertir la chaîne de valeur vers le type Go approprié et la stocker dans une variable interface{} :
    • Pour "int" : convertir en entier
    • Pour "string" : utiliser comme chaîne de caractères
    • Pour "bool" : convertir en booléen
  2. Utiliser l'assertion de type pour vérifier si la variable d'interface contient le type attendu spécifié dans la première entrée
  3. Si l'assertion de type réussit, affichez : "Success: [value] is a [type]"
  4. Si l'assertion de type échoue, affichez : "Failed: value is not a [type]"

Vous devez utiliser la syntaxe d'assertion de type sécurisée avec la variable ok pour vérifier si l'assertion a réussi. Le défi teste votre compréhension de la manière d'extraire en toute sécurité des valeurs concrètes des variables d'interface sans provoquer de panique dans votre programme.

Pour la conversion booléenne, "true" doit être converti en true et toute autre chaîne doit être convertie en false. Utilisez le package strconv pour la conversion de chaîne en entier.

Aide-mémoire

Les assertions de type vous permettent d'extraire des valeurs concrètes de variables d'interface en utilisant la syntaxe value, ok := interfaceVariable.(Type) :

var data interface{} = 42

number, ok := data.(int)
if ok {
    fmt.Println("It's an integer:", number)
} else {
    fmt.Println("Not an integer")
}

La variable ok indique si l'assertion a réussi. Si elle est fausse, value sera la valeur zéro de ce type. Vérifiez toujours ok pour éviter les panics suite à des assertions échouées.

Essayez vous-même

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// Lire l'entrée
	var dataType string
	var valueStr string
	fmt.Scanln(&dataType)
	fmt.Scanln(&valueStr)
	
	// Variable pour stocker la valeur de l'interface
	var interfaceValue interface{}
	
	// TODO: Écrivez votre code ci-dessous
	// 1. Convertir valueStr au type approprié en fonction de dataType et stocker dans interfaceValue
	// 2. Utiliser l'assertion de type pour vérifier si interfaceValue contient le type attendu
	// 3. Imprimer le message de succès ou d'échec approprié
	
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux