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 erstellt time.NewTicker einen Ticker, der in festgelegten Intervallen Werte über einen Channel sendet. Dies ist nützlich für Aufgaben, die regelmäßig ausgeführt werden müssen:

ticker := time.NewTicker(1 * time.Second)
for i := 0; i < 3; i++ {
    <-ticker.C // Warte 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.

challenge icon

Aufgabe

Einfach

Erstelle einen Meditationstimer für Sitzungen, der time.Sleep verwendet, um Pausen zwischen angeleiteten Anweisungen zu erzeugen, und die grundlegende Zeitsteuerung in Go-Programmen demonstriert.

Du erhältst zwei Eingaben:

  • Eine Zeichenkette mit Meditationsschritten im Format "step1:duration,step2:duration,step3:duration" (z. B. "Breathe in:3,Hold:2,Breathe out:4")
  • Eine Zeichenkette mit der Anzahl der zu wiederholenden Zyklen (z. B. "5")

Deine Aufgabe ist es:

  1. Die erste Eingabe durch Aufteilen an Kommas zu verarbeiten, um einzelne Meditationsschritte zu erhalten
  2. Für jeden Schritt an Doppelpunkten aufzuteilen, um die Anweisung und die Dauer (in Sekunden) zu extrahieren
  3. Die Dauerzeichenketten mithilfe des Pakets strconv in Ganzzahlen umzuwandeln
  4. Die zweite Eingabe in eine Ganzzahl umzuwandeln, um die Anzahl der Zyklen zu erhalten
  5. Die Sitzungsüberschrift anzuzeigen: "=== MEDITATION TIMER ==="
  6. Die Sitzungseinrichtung anzuzeigen: "Starting meditation session with [number_of_cycles] cycles"
  7. Für jeden Zyklus (beginnend mit Zyklus 1):
    • Anzuzeigen: "--- Cycle [cycle_number] ---"
    • Für jeden Meditationsschritt:
      • Anzuzeigen: "[instruction]..."
      • time.Sleep zu verwenden, um für die angegebene Dauer zu pausieren (Sekunden durch Multiplikation mit time.Duration in time.Second umzuwandeln)
      • Nach dem Schlafen anzuzeigen: "[instruction] complete ([duration] seconds)"
    • Nach dem Abschluss aller Schritte in einem Zyklus anzuzeigen: "Cycle [cycle_number] finished"
  8. Nach dem Abschluss aller Zyklen die Sitzungszusammenfassung anzuzeigen:
    • "=== SESSION COMPLETE ==="
    • "Total cycles completed: [number_of_cycles]"
    • "Steps per cycle: [number_of_steps]"
    • "Total meditation time: [total_seconds] seconds" (die Summe aller Schrittdauern multipliziert mit der Anzahl der Zyklen)
  9. Die Abschlussnachricht anzuzeigen: "Meditation session finished - well done!"

Verwende das Paket time für Schlafoperationen, 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.Sleep einen Parameter vom Typ time.Duration erwartet. Daher musst du deine ganzzahligen Sekunden mit time.Second multiplizieren, um den richtigen Dauerwert zu erzeugen. Diese Aufgabe demonstriert, wie time.Sleep verwendet wird, um zeitgesteuerte Pausen in der Programmausführung für praktische Anwendungen wie angeleitete Meditation oder Trainingstimer zu erzeugen.

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

Übe selbstständig: Online-Go-Compiler