Einfacher Zahlen-Validator
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 67 von 68.
Aufgabe
EinfachErstellen 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:
- Definieren Sie ein
Validator-Interface mit einer einzigen Methode:Validate() error - Erstellen Sie einen benutzerdefinierten Fehlertyp namens
ValidationError-Struct mit zwei Feldern:Value(int) undMessage(string) - Implementieren Sie die
Error() string-Methode fürValidationError, die die Nachricht im folgenden Format zurückgibt:"Validation failed: [message] (value: [value])" - Erstellen Sie ein
NumberValidator-Struct mit drei Feldern:Number(int),Min(int) undMax(int) - Implementieren Sie die
Validate() error-Methode fürNumberValidator, die:nilzurückgibt, wenn die Zahl innerhalb des gültigen Bereichs liegt (einschließlich)- 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
- Parsen Sie die erste Eingabe, indem Sie sie an den Kommas aufteilen, um einzelne Zahlen-Strings zu erhalten
- Parsen Sie die zweite Eingabe, indem Sie sie an den Doppelpunkten aufteilen, um die Minimal- und Maximalwerte zu extrahieren
- Konvertieren Sie alle String-Werte mithilfe des
strconv-Pakets in Ganzzahlen - Zeigen Sie den Validierungs-Header an:
"=== NUMBER VALIDATION SYSTEM ===" - Zeigen Sie die Validierungsparameter an:
"Validating numbers in range [min] to [max]" - 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]"
- Erstellen Sie eine
- Zeigen Sie die Validierungszusammenfassung an:
"=== VALIDATION SUMMARY ===""Total numbers checked: [total_count]""Valid numbers: [valid_count]""Invalid numbers: [invalid_count]"
- 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
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