Zusammenfassung – Einfacher Timer
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 65 von 68.
Aufgabe
EinfachErstelle eine Countdown-Timer-Anwendung, die time.NewTicker verwendet, um von einer angegebenen Dauer bis auf null herunterzuzählen und in regelmäßigen Abständen Fortschrittsmeldungen anzuzeigen. Diese Herausforderung testet deine Fähigkeit, Ticker, Schleifen und Dauerberechnungen zu kombinieren, um eine funktionierende Zeitmessanwendung zu erstellen.
Du erhältst zwei Eingaben:
- Eine Zeichenkette mit der Countdown-Dauer im Format
"value:unit"(z. B."10:Second"oder"3:Minute") - Eine Zeichenkette mit dem Aktualisierungsintervall im Format
"value:unit"(z. B."1:Second")
Deine Aufgabe ist es:
- Die erste Eingabe durch Aufteilen an Doppelpunkten zu analysieren, um den Wert und die Einheit der Countdown-Dauer zu extrahieren
- Die zweite Eingabe durch Aufteilen an Doppelpunkten zu analysieren, um den Wert und die Einheit des Aktualisierungsintervalls zu extrahieren
- Die Zeichenkettenwerte mithilfe des Pakets
strconvin Ganzzahlen umzuwandeln time.Duration-Objekte sowohl für die Countdown-Dauer als auch für das Aktualisierungsintervall mithilfe der entsprechenden Konstanten zu erstellen:- Für
"Second": mittime.Secondmultiplizieren - Für
"Minute": mittime.Minutemultiplizieren - Für
"Hour": mittime.Hourmultiplizieren
- Für
- Die Timer-Kopfzeile anzuzeigen:
"=== COUNTDOWN TIMER ===" - Die Timer-Konfiguration 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:
- Mit
<-ticker.Cauf jedes Ticker-Ereignis zu warten - Das Aktualisierungsintervall von der verbleibenden Zeit abzuziehen
- Wenn die verbleibende Zeit größer als 0 ist, Folgendes anzuzeigen:
"Time remaining: [remaining_time_object]" - Wenn die verbleibende Zeit 0 oder kleiner ist,
"Time's up!"anzuzeigen und die Schleife zu verlassen
- Mit
- Den Ticker mit
ticker.Stop()zu stoppen - Die Abschlussstatistiken anzuzeigen:
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(zu berechnen, wie oft die verbleibende Zeit angezeigt wurde)
- Die Abschlussmeldung anzuzeigen:
"Countdown timer finished successfully"
Verwende das Paket time für Ticker- und Daueroperationen, das Paket strings, um Eingabezeichenketten aufzuteilen, das Paket strconv, um Zeichenketten in Ganzzahlen umzuwandeln, und das Paket fmt für die Ausgabe. Denke daran, dass time.NewTicker einen Ticker zurückgibt, der in regelmäßigen Abständen Werte über seinen Kanal sendet, und dass du ticker.Stop() aufrufen musst, wenn du fertig bist, um Ressourcen freizugeben. Diese Herausforderung zeigt, wie du mithilfe der Zeitmessmechanismen von Go einen praktischen Countdown-Timer erstellst.
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Übe selbstständig: Online-Go-Compiler