Einfacher Zahlen-Validator
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 67 von 68.
Aufgabe
EinfachErstelle ein Zahlenvalidierungssystem, das demonstriert, wie Schnittstellen Verhaltensverträge definieren, während benutzerdefinierte Fehler aussagekräftiges Feedback liefern, wenn die Validierung fehlschlägt. Diese Aufgabe testet deine Fähigkeit, Schnittstellen zu erstellen, sie mit benutzerdefinierten Typen zu implementieren und Validierungsfehler angemessen zu behandeln.
Du erhältst zwei Eingaben:
- Eine Zeichenkette mit durch Kommas getrennten Zahlen, die validiert werden sollen (z. B.
"45,150,25,200,75") - Eine Zeichenkette mit dem Validierungsbereich im Format
"min:max"(z. B."1:100")
Deine Aufgabe ist es:
- Eine
Validator-Schnittstelle mit einer einzigen Methode zu definieren:Validate() error - Einen benutzerdefinierten Fehlertyp namens
ValidationErrorals Struct mit zwei Feldern zu erstellen:Value(int) undMessage(string) - Die Methode
Error() stringfürValidationErrorzu implementieren, die die Nachricht im Format"Validation failed: [message] (value: [value])"zurückgibt - Ein
NumberValidator-Struct mit drei Feldern zu erstellen:Number(int),Min(int) undMax(int) - Die Methode
Validate() errorfürNumberValidatorzu implementieren, die:nilzurückgibt, wenn sich die Zahl innerhalb des gültigen Bereichs befindet (einschließlich der Grenzen)- Einen
ValidationErrormit der Nachricht"number below minimum range"zurückgibt, wenn die Zahl kleiner als das Minimum ist - Einen
ValidationErrormit der Nachricht"number above maximum range"zurückgibt, wenn die Zahl größer als das Maximum ist
- Die erste Eingabe durch Aufteilen an den Kommas zu verarbeiten, um einzelne Zahlenzeichenketten zu erhalten
- Die zweite Eingabe durch Aufteilen an den Doppelpunkten zu verarbeiten, um Minimal- und Maximalwerte zu extrahieren
- Alle Zeichenkettenwerte mithilfe des
strconv-Pakets in Ganzzahlen umzuwandeln - Die Validierungsüberschrift anzuzeigen:
"=== NUMBER VALIDATION SYSTEM ===" - Die Validierungsparameter anzuzeigen:
"Validating numbers in range [min] to [max]" - Für jede Zahl:
- Eine
NumberValidator-Instanz mit der Zahl und den Bereichswerten zu erstellen - Die Methode
Validate()für den Validator aufzurufen - Wenn die Validierung erfolgreich ist (der Fehler
nilist), Folgendes anzuzeigen:"✓ [number] is valid" - Wenn die Validierung fehlschlägt (der Fehler nicht
nilist), Folgendes anzuzeigen:"✗ [error_message]"
- Eine
- Die Validierungszusammenfassung anzuzeigen:
"=== VALIDATION SUMMARY ===""Total numbers checked: [total_count]""Valid numbers: [valid_count]""Invalid numbers: [invalid_count]"
- Die Abschlussnachricht anzuzeigen:
"Number validation completed successfully"
Verwende das strings-Paket, um Eingabezeichenketten aufzuteilen, das strconv-Paket, um Zeichenketten in Ganzzahlen umzuwandeln, und das fmt-Paket für die formatierte Ausgabe. Diese Aufgabe demonstriert, wie flexible Validierungssysteme mithilfe von Schnittstellen erstellt werden können, während benutzerdefinierte Fehlertypen detaillierte Fehlerinformationen bereitstellen.
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
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und VerhaltenÜbe selbstständig: Online-Go-Compiler