Menu
Coddy logo textTech

Type Assertions

Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 17 von 68.

Bei der Arbeit mit Interface-Variablen musst du häufig auf den tatsächlich darin gespeicherten konkreten Wert zugreifen. Hier kommen Typzusicherungen ins Spiel – sie ermöglichen es dir, den zugrunde liegenden Wert sicher zu extrahieren und zu verwenden.

Eine Typassertion verwendet diese Syntax: value, ok := interfaceVariable.(Type). Der erste Rückgabewert ist der extrahierte Wert des angegebenen Typs, und der zweite ist ein boolescher Wert, der dir mitteilt, ob die Assertion erfolgreich war.

var data interface{} = 42

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

Die Variable ok ist entscheidend für die Sicherheit. Wenn du versuchst, den falschen Typ zu erzwingen, wird ok den Wert false haben, und value wird der Nullwert dieses Typs sein. Ohne ok zu überprüfen, würde eine fehlgeschlagene Typassertion dazu führen, dass dein Programm in Panik gerät.

Typzusicherungen sind bei der Arbeit mit interface{}-Werten unerlässlich. Sie ermöglichen es dir, das generische Interface wieder in einen bestimmten Typ umzuwandeln, sodass du dessen Methoden und Operationen verwenden kannst.

challenge icon

Aufgabe

Einfach

In dieser Herausforderung übst du die Verwendung von Typassertionen, um sicher konkrete Werte aus Interface-Variablen zu extrahieren und mit ihnen zu arbeiten. Du erstellst einen Datenanalysator, der verschiedene in leeren Interfaces gespeicherte Werttypen verarbeitet.

Du erhältst zwei Eingaben:

  • Eine Zeichenkette, die den zu prüfenden Datentyp darstellt (z. B. "int", "string" oder "bool")
  • Eine Zeichenkette, die den tatsächlichen Wert darstellt (z. B. "42", "hello" oder "true")

Deine Aufgabe ist es:

  1. Die Wertzeichenkette in den entsprechenden Go-Typ umzuwandeln und sie in einer interface{}-Variable zu speichern:
    • Für "int": in eine Ganzzahl umwandeln
    • Für "string": als Zeichenkette verwenden
    • Für "bool": in einen booleschen Wert umwandeln
  2. Eine Typassertion zu verwenden, um zu prüfen, ob die Interface-Variable den erwarteten, in der ersten Eingabe angegebenen Typ enthält
  3. Wenn die Typassertion erfolgreich ist, Folgendes auszugeben: "Success: [value] is a [type]"
  4. Wenn die Typassertion fehlschlägt, Folgendes auszugeben: "Failed: value is not a [type]"

Du musst die sichere Syntax für Typassertionen mit der ok-Variable verwenden, um zu prüfen, ob die Assertion erfolgreich war. Die Herausforderung testet dein Verständnis dafür, wie konkrete Werte sicher aus Interface-Variablen extrahiert werden, ohne dass dein Programm einen Panic auslöst.

Bei der Umwandlung in einen booleschen Wert soll "true" in true umgewandelt werden, und jede andere Zeichenkette soll in false umgewandelt werden. Verwende das Paket strconv für die Umwandlung einer Zeichenkette in eine Ganzzahl.

Probier es selbst

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// Eingabe lesen
	var dataType string
	var valueStr string
	fmt.Scanln(&dataType)
	fmt.Scanln(&valueStr)
	
	// Variable zum Speichern des Interface-Werts
	var interfaceValue interface{}
	
	// TODO: Schreibe deinen Code unten
	// 1. Konvertiere valueStr basierend auf dataType in den passenden Typ und speichere ihn in interfaceValue
	// 2. Verwende Type Assertion, um zu prüfen, ob interfaceValue den erwarteten Typ enthält
	// 3. Gib die entsprechende Erfolgs- oder Fehlermeldung aus
	
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-Go-Compiler