Zusammenfassung – Einfacher Timer
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 65 von 68.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Aufgabe
EinfachErstellen Sie eine Countdown-Timer-Anwendung, die time.NewTicker verwendet, um von einer festgelegten Dauer auf Null herunterzuzählen und dabei in regelmäßigen Abständen Fortschrittsmeldungen anzuzeigen. Diese Herausforderung testet Ihre Fähigkeit, Ticker, Schleifen und Dauerberechnungen zu kombinieren, um eine funktionale Timing-Anwendung zu erstellen.
Sie erhalten zwei Eingaben:
- Einen String, der die Countdown-Dauer im Format
"value:unit"enthält (z. B."10:Second"oder"3:Minute") - Einen String, der das Aktualisierungsintervall im Format
"value:unit"enthält (z. B."1:Second")
Ihre Aufgabe ist es:
- Die erste Eingabe zu parsen, indem Sie sie am Doppelpunkt trennen, um den Wert und die Einheit der Countdown-Dauer zu extrahieren
- Die zweite Eingabe zu parsen, indem Sie sie am Doppelpunkt trennen, um den Wert und die Einheit des Aktualisierungsintervalls zu extrahieren
- Die String-Werte mit dem Paket
strconvin Ganzzahlen umzuwandeln time.Duration-Objekte sowohl für die Countdown-Dauer als auch für das Aktualisierungsintervall unter Verwendung der entsprechenden Konstanten zu erstellen:- Für
"Second": Multiplikation mittime.Second - Für
"Minute": Multiplikation mittime.Minute - Für
"Hour": Multiplikation mittime.Hour
- Für
- Den Timer-Header anzuzeigen:
"=== COUNTDOWN TIMER ===" - Das Timer-Setup anzuzeigen:
"Starting countdown from [countdown_duration_object]" - Die Aktualisierungsfrequenz anzuzeigen:
"Updates every [update_interval_object]" - Einen Ticker mit
time.NewTickerund der Dauer des Aktualisierungsintervalls zu erstellen - Eine Variable für die verbleibende Zeit mit der Countdown-Dauer zu initialisieren
- Eine Schleife zum Herunterzählen zu verwenden:
- Auf jedes Ticker-Ereignis mit
<-ticker.Cwarten - Das Aktualisierungsintervall von der verbleibenden Zeit subtrahieren
- Wenn die verbleibende Zeit größer als 0 ist, anzeigen:
"Time remaining: [remaining_time_object]" - Wenn die verbleibende Zeit 0 oder weniger beträgt, anzeigen:
"Time's up!"und die Schleife verlassen
- Auf jedes Ticker-Ereignis mit
- Den Ticker mit
ticker.Stop()stoppen - Abschlussstatistiken anzeigen:
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(berechnen Sie, wie oft die verbleibende Zeit angezeigt wurde)
- Die Abschlussmeldung anzeigen:
"Countdown timer finished successfully"
Verwenden Sie das Paket time für Ticker- und Dauer-Operationen, das Paket strings zum Trennen von Eingabestrings, das Paket strconv zum Umwandeln von Strings in Ganzzahlen und das Paket fmt für die Ausgabe. Denken Sie daran, dass time.NewTicker einen Ticker zurückgibt, der in regelmäßigen Abständen Werte über seinen Kanal sendet, und dass Sie ticker.Stop() aufrufen müssen, wenn Sie fertig sind, um Ressourcen freizugeben. Diese Herausforderung zeigt, wie man einen praktischen Countdown-Timer mit den Timing-Mechanismen von Go erstellt.
Probier es selbst
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Eingabe lesen
var countdownInput string
var intervalInput string
fmt.Scanln(&countdownInput)
fmt.Scanln(&intervalInput)
// Countdown-Dauer-Eingabe parsen
countdownParts := strings.Split(countdownInput, ":")
countdownValue, _ := strconv.Atoi(countdownParts[0])
countdownUnit := countdownParts[1]
// Aktualisierungsintervall-Eingabe parsen
intervalParts := strings.Split(intervalInput, ":")
intervalValue, _ := strconv.Atoi(intervalParts[0])
intervalUnit := intervalParts[1]
// TODO: Schreiben Sie Ihren Code unten
// Mit Switch-Anweisungen in time.Duration-Objekte umwandeln
// Den Countdown-Timer erstellen (für Tests ohne tatsächliche Verzögerungen simulieren)
// Die Countdown-Schleife implementieren
// Alle erforderlichen Meldungen und Statistiken anzeigen
// Hinweis: Simulieren Sie zu Testzwecken das Ticker-Verhalten ohne echte Zeitverzögerungen
}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ügen7Fehlerbehandlung im Detail
Benutzerdefinierte FehlertypenFehler-Wrapping mit `%w`Unwrapping mit `errors.Is`Unwrapping mit `errors.As``panic` verstehen`recover` verwendenZusammenfassung – Sichere Division10Arbeiten mit Zeit
Aktuelle Zeit abrufenEinen bestimmten Zeitpunkt erstellenZeit formatierenZeit-Strings parsenZeitdauerZeitarithmetikSleeping und TickerZusammenfassung – Einfacher Timer2Structs 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