Recap – Erstellen eines Utilitys
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 57 von 68.
Aufgabe
EinfachErstellen Sie ein umfassendes stringutil-Paket mit Funktionen zur String-Manipulation und demonstrieren Sie dessen Verwendung in einem Hauptprogramm. Diese Herausforderung testet Ihre Fähigkeit, ein benutzerdefiniertes Utility-Paket zu erstellen, exportierte Funktionen zu implementieren und Ihr Paket von einem anderen Programm aus zu verwenden.
Sie erhalten zwei Eingaben:
- Einen String, der Funktionsspezifikationen im Format
"function1:description1,function2:description2"enthält (z. B."Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase") - Einen String, der Test-Strings enthält, die durch Pipes im Format
"string1|string2|string3"getrennt sind (z. B."hello|Go Programming|WORLD")
Ihre Aufgabe ist es:
- Erstellen Sie ein
stringutil-Paket, indem Siepackage stringutildeklarieren - Analysieren Sie die erste Eingabe, indem Sie sie an Kommas aufteilen, um die einzelnen Funktionsspezifikationen zu erhalten
- Teilen Sie für jede Funktionsspezifikation den String an Doppelpunkten auf, um den Funktionsnamen und die Beschreibung zu erhalten
- Implementieren Sie die folgenden exportierten Funktionen in Ihrem
stringutil-Paket:Reverse(s string) string- gibt den String mit den Zeichen in umgekehrter Reihenfolge zurückToUpper(s string) string- gibt den in Großbuchstaben umgewandelten String zurückToLower(s string) string- gibt den in Kleinbuchstaben umgewandelten String zurückLength(s string) int- gibt die Länge des Strings zurück
- Importieren Sie in Ihrem Hauptprogramm das
stringutil-Paket - Zeigen Sie den Paket-Header an:
"=== STRINGUTIL PACKAGE DEMONSTRATION ===" - Zeigen Sie die verfügbaren Funktionen an:
"Available functions in stringutil package:"- Für jede Funktion aus der ersten Eingabe:
"- [function_name]: [description]"
- Analysieren Sie die zweite Eingabe, indem Sie sie an Pipes aufteilen, um die einzelnen Test-Strings zu erhalten
- Zeigen Sie den Test-Header an:
"Testing stringutil functions:" - Demonstrieren Sie für jeden Test-String alle Funktionen:
"Testing with: \"[test_string]\""" stringutil.Reverse: \"[reversed_result]\""" stringutil.ToUpper: \"[uppercase_result]\""" stringutil.ToLower: \"[lowercase_result]\""" stringutil.Length: [length_result]"
- Berechnen und zeigen Sie Statistiken an:
"=== 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]"
- Zeigen Sie den längsten und den kürzesten String an:
"Longest string: \"[longest_string]\" (length: [length])""Shortest string: \"[shortest_string]\" (length: [length])"
- Zeigen Sie die Abschlussmeldung an:
"Package demonstration completed successfully"
Verwenden Sie das strings-Paket, um Eingabestrings aufzuteilen und Text zu manipulieren, und das fmt-Paket für die formatierte Ausgabe. Für die Reverse-Funktion müssen Sie den String in ein Slice von Runes umwandeln, die Reihenfolge umkehren und wieder in einen String zurückverwandeln. Denken Sie daran, dass alle exportierten Funktionen mit Großbuchstaben beginnen müssen, um von anderen Paketen aus zugänglich zu sein. Diese Herausforderung zeigt, wie man wiederverwendbare Utility-Pakete erstellt und zusammengehörige Funktionalitäten 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