Menu
Coddy logo textTech

Sleeping und Ticker

Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 64 von 68.

Manchmal müssen Sie das Timing der Ausführung Ihres Programms steuern. Go bietet hierfür zwei wesentliche Funktionen im time-Paket an: time.Sleep zum Pausieren der Ausführung und time.NewTicker zum Ausführen von Aktionen in regelmäßigen Abständen.

Die Funktion time.Sleep pausiert Ihr Programm für eine festgelegte Dauer. Sie nimmt eine time.Duration als Parameter entgegen und blockiert die Ausführung, bis diese Zeit verstrichen ist:

fmt.Println("Starting...")
time.Sleep(2 * time.Second)
fmt.Println("Two seconds have passed!")

Für wiederholte Aktionen in regelmäßigen Abständen erzeugt time.NewTicker einen Ticker, der in festgelegten Intervallen Werte über einen Channel sendet. Dies ist nützlich für Aufgaben, die periodisch ausgeführt werden müssen:

ticker := time.NewTicker(1 * time.Second)
for i := 0; i < 3; i++ {
    <-ticker.C // Warten auf den nächsten Tick
    fmt.Println("Tick", i+1)
}

Diese Timing-Funktionen sind essenziell für das Erstellen von Verzögerungen, das Implementieren von Timeouts und das Planen von wiederkehrenden Operationen in Ihren Go-Programmen.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

challenge icon

Aufgabe

Einfach

Erstellen Sie einen Meditations-Sitzungstimer, der time.Sleep verwendet, um Pausen zwischen geführten Anweisungen zu erzeugen, und die grundlegende Zeitsteuerung in Go-Programmen demonstriert.

Sie erhalten zwei Eingaben:

  • Einen String, der Meditationsschritte im Format "step1:duration,step2:duration,step3:duration" enthält (z. B. "Breathe in:3,Hold:2,Breathe out:4")
  • Einen String, der die Anzahl der zu wiederholenden Zyklen enthält (z. B. "5")

Ihre Aufgabe ist es:

  1. Die erste Eingabe zu parsen, indem Sie sie an Kommas aufteilen, um die einzelnen Meditationsschritte zu erhalten
  2. Für jeden Schritt an Doppelpunkten aufzuteilen, um die Anweisung und die Dauer (in Sekunden) zu extrahieren
  3. Die Dauer-Strings mithilfe des strconv-Pakets in Ganzzahlen umzuwandeln
  4. Die zweite Eingabe in eine Ganzzahl umzuwandeln, um die Anzahl der Zyklen zu erhalten
  5. Den Sitzungs-Header anzuzeigen: "=== MEDITATION TIMER ==="
  6. Das Sitzungs-Setup anzuzeigen: "Starting meditation session with [number_of_cycles] cycles"
  7. Für jeden Zyklus (beginnend bei Zyklus 1):
    • Anzeige: "--- Cycle [cycle_number] ---"
    • Für jeden Meditationsschritt:
      • Anzeige: "[instruction]..."
      • Verwenden Sie time.Sleep, um für die angegebene Dauer zu pausieren (konvertieren Sie Sekunden in time.Duration, indem Sie mit time.Second multiplizieren)
      • Nach dem Sleep-Befehl, Anzeige: "[instruction] complete ([duration] seconds)"
    • Nach Abschluss aller Schritte in einem Zyklus, Anzeige: "Cycle [cycle_number] finished"
  8. Nachdem alle Zyklen abgeschlossen sind, die Sitzungszusammenfassung anzeigen:
    • "=== SESSION COMPLETE ==="
    • "Total cycles completed: [number_of_cycles]"
    • "Steps per cycle: [number_of_steps]"
    • "Total meditation time: [total_seconds] seconds" (Summe aller Schrittdauern multipliziert mit der Anzahl der Zyklen)
  9. Die Abschlussmeldung anzeigen: "Meditation session finished - well done!"

Verwenden Sie das time-Paket für Sleep-Operationen, das strings-Paket zum Aufteilen von Eingabestrings, das strconv-Paket zum Umwandeln von Strings in Ganzzahlen und das fmt-Paket für die Ausgabe. Denken Sie daran, dass time.Sleep einen time.Duration-Parameter erwartet, daher müssen Sie Ihre Ganzzahl-Sekunden mit time.Second multiplizieren, um den korrekten Dauer-Wert zu erstellen. Diese Herausforderung zeigt, wie man time.Sleep verwendet, um zeitgesteuerte Pausen in der Programmausführung für praktische Anwendungen wie geführte Meditationen oder Übungstimer zu erstellen.

Spickzettel

Verwenden Sie time.Sleep, um die Programmausführung für eine bestimmte Dauer zu pausieren:

time.Sleep(2 * time.Second)

Verwenden Sie time.NewTicker, um Aktionen in regelmäßigen Abständen auszuführen:

ticker := time.NewTicker(1 * time.Second)
for i := 0; i < 3; i++ {
    <-ticker.C // Auf den nächsten Tick warten
    fmt.Println("Tick", i+1)
}

Beide Funktionen verwenden time.Duration-Werte. Konvertieren Sie Ganzzahlen in eine Dauer, indem Sie sie mit time.Second multiplizieren.

Probier es selbst

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
	"time"
)

func main() {
	// Eingabe mit bufio.Scanner lesen, um Leerzeichen korrekt zu verarbeiten
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	stepsInput := scanner.Text()
	
	scanner.Scan()
	cyclesInput := scanner.Text()
	
	// Meditationsschritte und Zyklen parsen
	steps := strings.Split(stepsInput, ",")
	cycles, _ := strconv.Atoi(cyclesInput)
	
	// TODO: Schreiben Sie Ihren Code unten
	// Jeden Schritt parsen, um Anweisung und Dauer zu extrahieren
	// Denken Sie daran zu prüfen, ob der Parts-Slice genügend Elemente hat, bevor Sie darauf zugreifen
	// Sitzungs-Header und Setup anzeigen
	// Durch Zyklen und Schritte iterieren
	// time.Sleep für Pausen verwenden (erwägen Sie die Verwendung von Millisekunden zum Testen)
	// Abschlussmeldungen und Zusammenfassung anzeigen
	
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf