Menu
Coddy logo textTech

Type Switch

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

Während Typzusicherungen sich gut zur Überprüfung eines einzelnen Typs eignen, musst du häufig mehrere mögliche Typen für eine Schnittstellenvariable behandeln. Hier erweist sich ein Typswitch als äußerst nützlich – er bietet eine übersichtliche Möglichkeit, je nach konkretem Typ unterschiedliche Aktionen auszuführen.

Ein Typ-Schalter verwendet diese spezielle Syntax: switch v := i.(type). Beachte das Schlüsselwort (type) anstelle eines spezifischen Typs. Die Variable v enthält in jedem Fall den tatsächlichen Wert mit seinem konkreten Typ:

func describe(data interface{}) {
    switch v := data.(type) {
    case int:
        fmt.Printf("Integer: %d\n", v)
    case string:
        fmt.Printf("String: %s\n", v)
    case bool:
        fmt.Printf("Boolean: %t\n", v)
    default:
        fmt.Printf("Unknown type: %T\n", v)
    }
}

In jedem Fall hat v automatisch den richtigen Typ – eine zusätzliche Typzusicherung ist nicht erforderlich. Dadurch werden Typschalter deutlich übersichtlicher als das Verketten mehrerer Typzusicherungen mit If-Else-Anweisungen, insbesondere wenn du mehrere verschiedene Typen an einer Stelle behandeln musst.

challenge icon

Aufgabe

Einfach

In dieser Herausforderung übst du die Verwendung von Typswitches, um mehrere Datentypen in einem Benachrichtigungssystem zu verarbeiten. Du erstellst eine Funktion, die verschiedene Arten von Benachrichtigungen verarbeitet und sie abhängig von ihrem konkreten Typ entsprechend formatiert.

Du erhältst zwei Eingaben:

  • Eine Zeichenkette, die den Benachrichtigungstyp darstellt (z. B. "email", "sms", "push" oder "alert")
  • Eine Zeichenkette, die den Inhalt oder Wert der Benachrichtigung darstellt

Deine Aufgabe ist es:

  1. Eine Funktion namens processNotification zu erstellen, die einen interface{}-Parameter übernimmt
  2. Den Inhalt abhängig von der Eingabe des Benachrichtigungstyps in den entsprechenden Go-Typ umzuwandeln und ihn in einer interface{}-Variable zu speichern:
    • Für "email": den Inhalt als Zeichenkette verwenden
    • Für "sms": den Inhalt in eine Ganzzahl umwandeln (die die Zeichenanzahl darstellt)
    • Für "push": den Inhalt in einen booleschen Wert umwandeln (true für "enabled", false für alles andere)
    • Für "alert": den Inhalt in einen float64 umwandeln (der die Prioritätsstufe darstellt)
  3. Die Funktion processNotification mit dem umgewandelten Wert aufzurufen
  4. Innerhalb von processNotification einen Typswitch zu verwenden, um jeden Typ zu verarbeiten und die entsprechende Nachricht auszugeben:
    • Für string: "Email notification: [value]"
    • Für int: "SMS notification with [value] characters"
    • Für bool: "Push notifications: [value]"
    • Für float64: "Alert with priority: [value]"
    • Für jeden anderen Typ: "Unknown notification type"

Verwende das Paket strconv für Zeichenkettenkonvertierungen. Bei der booleschen Konvertierung soll nur "enabled" zu true führen. Diese Herausforderung zeigt, wie Typswitches eine übersichtliche Möglichkeit bieten, mehrere Typen innerhalb einer einzigen Kontrollstruktur zu verarbeiten, wobei automatisch der korrekt typisierte Wert in jedem Fall bereitgestellt wird.

Gib den float64 in seiner kürzesten Form aus, so wie es fmt.Println oder die Operatoren %v / %g tun: 3.5 wird als 3.5 und 1.0 als 1 ausgegeben (der Operator %f würde 1.000000 ausgeben).

Probier es selbst

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// Eingabe lesen
	var notificationType string
	var content string
	fmt.Scanln(&notificationType)
	fmt.Scanln(&content)
	
	// TODO: Schreibe deinen Code darunter
	// 1. Create processNotification function that takes interface{} parameter
	// 2. Convert content to appropriate type based on notificationType
	// 3. Call processNotification with the converted value
	// 4. Use type switch inside processNotification to handle different types
	
}
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