Menu
Coddy logo textTech

Einfacher Zahlen-Validator

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

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Zahlenvalidierungssystem, das demonstriert, wie Interfaces Verhaltensverträge definieren, während benutzerdefinierte Fehler aussagekräftiges Feedback geben, wenn die Validierung fehlschlägt. Diese Herausforderung testet Ihre Fähigkeit, Interfaces zu erstellen, sie mit benutzerdefinierten Typen zu implementieren und Validierungsfehler angemessen zu behandeln.

Sie erhalten zwei Eingaben:

  • Einen String, der durch Kommas getrennte zu validierende Zahlen enthält (z. B. "45,150,25,200,75")
  • Einen String, der den Validierungsbereich im Format "min:max" enthält (z. B. "1:100")

Ihre Aufgabe ist es:

  1. Definieren Sie ein Validator-Interface mit einer einzigen Methode: Validate() error
  2. Erstellen Sie einen benutzerdefinierten Fehlertyp namens ValidationError-Struct mit zwei Feldern: Value (int) und Message (string)
  3. Implementieren Sie die Error() string-Methode für ValidationError, die die Nachricht im folgenden Format zurückgibt: "Validation failed: [message] (value: [value])"
  4. Erstellen Sie ein NumberValidator-Struct mit drei Feldern: Number (int), Min (int) und Max (int)
  5. Implementieren Sie die Validate() error-Methode für NumberValidator, die:
    • nil zurückgibt, wenn die Zahl innerhalb des gültigen Bereichs liegt (einschließlich)
    • Einen ValidationError mit der Nachricht "number below minimum range" zurückgibt, wenn die Zahl kleiner als das Minimum ist
    • Einen ValidationError mit der Nachricht "number above maximum range" zurückgibt, wenn die Zahl größer als das Maximum ist
  6. Parsen Sie die erste Eingabe, indem Sie sie an den Kommas aufteilen, um einzelne Zahlen-Strings zu erhalten
  7. Parsen Sie die zweite Eingabe, indem Sie sie an den Doppelpunkten aufteilen, um die Minimal- und Maximalwerte zu extrahieren
  8. Konvertieren Sie alle String-Werte mithilfe des strconv-Pakets in Ganzzahlen
  9. Zeigen Sie den Validierungs-Header an: "=== NUMBER VALIDATION SYSTEM ==="
  10. Zeigen Sie die Validierungsparameter an: "Validating numbers in range [min] to [max]"
  11. Für jede Zahl:
    • Erstellen Sie eine NumberValidator-Instanz mit der Zahl und den Bereichswerten
    • Rufen Sie die Validate()-Methode auf dem Validator auf
    • Wenn die Validierung erfolgreich ist (Fehler ist nil), zeigen Sie an: "✓ [number] is valid"
    • Wenn die Validierung fehlschlägt (Fehler ist nicht nil), zeigen Sie an: "✗ [error_message]"
  12. Zeigen Sie die Validierungszusammenfassung an:
    • "=== VALIDATION SUMMARY ==="
    • "Total numbers checked: [total_count]"
    • "Valid numbers: [valid_count]"
    • "Invalid numbers: [invalid_count]"
  13. Zeigen Sie die Abschlussmeldung an: "Number validation completed successfully"

Verwenden Sie das strings-Paket, um Eingabe-Strings aufzuteilen, das strconv-Paket, um Strings in Ganzzahlen zu konvertieren, und das fmt-Paket für die formatierte Ausgabe. Diese Herausforderung zeigt, wie man flexible Validierungssysteme mithilfe von Interfaces erstellt und gleichzeitig detaillierte Fehlerinformationen durch benutzerdefinierte Fehlertypen bereitstellt.

Probier es selbst

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	// Eingabe lesen
	var numbersInput string
	var rangeInput string
	fmt.Scanln(&numbersInput)
	fmt.Scanln(&rangeInput)
	
	// Eingaben parsen
	numberStrings := strings.Split(numbersInput, ",")
	rangeParts := strings.Split(rangeInput, ":")
	
	// Bereichswerte in Ganzzahlen umwandeln
	min, _ := strconv.Atoi(rangeParts[0])
	max, _ := strconv.Atoi(rangeParts[1])
	
	// TODO: Schreiben Sie Ihren Code unten
	// 1. Definieren Sie das Validator-Interface
	// 2. Erstellen Sie das ValidationError-Struct und implementieren Sie die Error()-Methode
	// 3. Erstellen Sie das NumberValidator-Struct und implementieren Sie die Validate()-Methode
	// 4. Verarbeiten Sie jede Zahl und validieren Sie diese
	// 5. Ergebnisse und Zusammenfassung anzeigen
	
	// Validierungs-Header anzeigen
	fmt.Println("=== NUMBER VALIDATION SYSTEM ===")
	fmt.Printf("Validating numbers in range %d to %d\n", min, max)
	
	// Hier jede Zahl verarbeiten
	
	// Validierungs-Zusammenfassung anzeigen
	fmt.Println("=== VALIDATION SUMMARY ===")
	// Hier Zusammenfassungs-Ausgabe hinzufügen
	
	fmt.Println("Number validation completed successfully")
}

Alle Lektionen in Logik & Ablauf