Recap – Erstellen eines Utilitys
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 57 von 68.
Aufgabe
EinfachErstelle ein umfassendes stringutil-Paket mit Funktionen zur Zeichenkettenmanipulation und demonstriere seine Verwendung in einem Hauptprogramm. Diese Herausforderung testet deine Fähigkeit, ein eigenes Dienstprogrammpaket zu erstellen, exportierte Funktionen zu implementieren und dein Paket aus einem anderen Programm zu verwenden.
Du erhältst zwei Eingaben:
- Eine Zeichenkette mit Funktionsspezifikationen im Format
"function1:description1,function2:description2"(z. B."Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase") - Eine Zeichenkette mit durch Pipes getrennten Testzeichenketten im Format
"string1|string2|string3"(z. B."hello|Go Programming|WORLD")
Deine Aufgabe ist es:
- Ein
stringutil-Paket zu erstellen, indem dupackage stringutildeklarierst - Die erste Eingabe durch Aufteilen an Kommas zu analysieren, um einzelne Funktionsspezifikationen zu erhalten
- Für jede Funktionsspezifikation an Doppelpunkten aufzuteilen, um den Funktionsnamen und die Beschreibung zu erhalten
- Die folgenden exportierten Funktionen in deinem
stringutil-Paket zu implementieren:Reverse(s string) string– gibt die Zeichenkette mit umgekehrter Zeichenreihenfolge zurückToUpper(s string) string– gibt die in Großbuchstaben umgewandelte Zeichenkette zurückToLower(s string) string– gibt die in Kleinbuchstaben umgewandelte Zeichenkette zurückLength(s string) int– gibt die Länge der Zeichenkette zurück
- In deinem Hauptprogramm das
stringutil-Paket zu importieren - Die Paketüberschrift anzuzeigen:
"=== STRINGUTIL PACKAGE DEMONSTRATION ===" - Die verfügbaren Funktionen anzuzeigen:
"Available functions in stringutil package:"- Für jede Funktion aus der ersten Eingabe:
"- [function_name]: [description]"
- Die zweite Eingabe durch Aufteilen an Pipes zu analysieren, um einzelne Testzeichenketten zu erhalten
- Die Testüberschrift anzuzeigen:
"Testing stringutil functions:" - Für jede Testzeichenkette alle Funktionen zu demonstrieren:
"Testing with: \"[test_string]\""" stringutil.Reverse: \"[reversed_result]\""" stringutil.ToUpper: \"[uppercase_result]\""" stringutil.ToLower: \"[lowercase_result]\""" stringutil.Length: [length_result]"
- Statistiken zu berechnen und anzuzeigen:
"=== STATISTICS ===""Total test strings processed: [number_of_test_strings]""Functions available in package: [number_of_functions_from_first_input]""Total function calls made: [total_function_calls]"
- Die längsten und kürzesten Zeichenketten anzuzeigen:
"Longest string: \"[longest_string]\" (length: [length])""Shortest string: \"[shortest_string]\" (length: [length])"
- Die Abschlussmeldung anzuzeigen:
"Package demonstration completed successfully"
Verwende das strings-Paket, um Eingabezeichenketten aufzuteilen und Text zu bearbeiten, sowie das fmt-Paket für formatierte Ausgaben. Für die Funktion Reverse musst du die Zeichenkette in ein Slice von Runen umwandeln, die Reihenfolge umkehren und sie wieder in eine Zeichenkette umwandeln. Denke daran, dass alle exportierten Funktionen mit Großbuchstaben beginnen müssen, damit sie aus anderen Paketen zugänglich sind. Diese Herausforderung zeigt, wie man wiederverwendbare Dienstprogrammpakete erstellt und zusammengehörige Funktionen gemeinsam organisiert.
Probier es selbst
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// TODO: Erstellen Sie hier Ihre stringutil-Paketfunktionen
// Da wir keine separaten Dateien verwenden können, definieren Sie die Funktionen direkt
// Diese würden sich normalerweise in einer separaten Paketdatei befinden
// func Reverse(s string) string {
// // In Runen konvertieren, umkehren, zurück in String konvertieren
// }
// func ToUpper(s string) string {
// // strings.ToUpper verwenden
// }
// func ToLower(s string) string {
// // strings.ToLower verwenden
// }
// func Length(s string) int {
// // len(s) zurückgeben
// }
func main() {
// Eingabe mit bufio.Scanner lesen, um Leerzeichen korrekt zu verarbeiten
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionSpecs := scanner.Text()
scanner.Scan()
testStrings := scanner.Text()
// Funktionsspezifikationen parsen
funcList := strings.Split(functionSpecs, ",")
// Test-Strings parsen
testList := strings.Split(testStrings, "|")
// TODO: Schreiben Sie Ihren Code unten
// 1. Paket-Header anzeigen
// 2. Verfügbare Funktionen aus funcList anzeigen (Array-Längen prüfen)
// 3. Alle Funktionen mit jedem Test-String testen
// 4. Statistiken berechnen und anzeigen
// 5. Längste/kürzeste Strings finden und anzeigen (prüfen, ob testList Elemente enthält)
// 6. Abschlussmeldung anzeigen
// Denken Sie daran, Ihre stringutil-Paketfunktionen zu verwenden, wie:
// Reverse(testString)
// ToUpper(testString)
// ToLower(testString)
// Length(testString)
}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 Verhalten6Idiomatisches Go: Sets
Das Set-Idiom in GoEin Set erstellenElemente zu einem Set hinzufügenPrüfen auf MitgliedschaftAus einem Set entfernenÜber ein Set iterierenZusammenfassung – Eindeutige Benutzernamen9Packages und Scope
Was ist ein Package?Exportiert vs. Nicht-exportiertEin einfaches Package erstellenPackage-AliasingDer Blank Identifier `_`Die `init`-FunktionRecap – Erstellen eines UtilitysÜbe selbstständig: Online-Go-Compiler