Menu
Coddy logo textTech

Sleeping y Tickers

Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 64 de 68.

A veces necesitas controlar el tiempo de ejecución de tu programa. Go proporciona dos funciones esenciales en el paquete time para esto: time.Sleep para pausar la ejecución y time.NewTicker para realizar acciones a intervalos regulares.

La función time.Sleep pausa tu programa durante una duración especificada. Toma un time.Duration como su parámetro y bloquea la ejecución hasta que haya transcurrido ese tiempo:

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

Para acciones repetidas a intervalos regulares, time.NewTicker crea un ticker que envía valores en un canal a intervalos especificados. Esto es útil para tareas que necesitan ejecutarse periódicamente:

ticker := time.NewTicker(1 * time.Second)
for i := 0; i < 3; i++ {
    <-ticker.C // Esperar al siguiente tick
    fmt.Println("Tick", i+1)
}

Estas funciones de temporización son esenciales para crear retrasos, implementar tiempos de espera y programar operaciones recurrentes en tus programas de Go.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

challenge icon

Desafío

Fácil

Crea un temporizador de sesión de meditación que utilice time.Sleep para crear pausas entre las instrucciones guiadas y demuestre el control básico de temporización en programas de Go.

Recibirás dos entradas:

  • Una cadena que contiene los pasos de meditación en el formato "step1:duration,step2:duration,step3:duration" (por ejemplo, "Breathe in:3,Hold:2,Breathe out:4")
  • Una cadena que contiene el número de ciclos a repetir (por ejemplo, "5")

Tu tarea es:

  1. Analizar la primera entrada dividiéndola por comas para obtener los pasos de meditación individuales
  2. Para cada paso, dividir por dos puntos para extraer la instrucción y la duración (en segundos)
  3. Convertir las cadenas de duración a enteros utilizando el paquete strconv
  4. Convertir la segunda entrada a un entero para obtener el número de ciclos
  5. Mostrar el encabezado de la sesión: "=== MEDITATION TIMER ==="
  6. Mostrar la configuración de la sesión: "Starting meditation session with [number_of_cycles] cycles"
  7. Para cada ciclo (comenzando desde el ciclo 1):
    • Mostrar: "--- Cycle [cycle_number] ---"
    • Para cada paso de meditación:
      • Mostrar: "[instruction]..."
      • Usar time.Sleep para pausar durante la duración especificada (convierte los segundos a time.Duration multiplicándolos por time.Second)
      • Después de la pausa, mostrar: "[instruction] complete ([duration] seconds)"
    • Después de completar todos los pasos de un ciclo, mostrar: "Cycle [cycle_number] finished"
  8. Después de completar todos los ciclos, mostrar el resumen de la sesión:
    • "=== SESSION COMPLETE ==="
    • "Total cycles completed: [number_of_cycles]"
    • "Steps per cycle: [number_of_steps]"
    • "Total meditation time: [total_seconds] seconds" (suma de todas las duraciones de los pasos multiplicada por el número de ciclos)
  9. Mostrar el mensaje de finalización: "Meditation session finished - well done!"

Utiliza el paquete time para las operaciones de pausa, el paquete strings para dividir las cadenas de entrada, el paquete strconv para convertir cadenas a enteros y el paquete fmt para la salida. Recuerda que time.Sleep recibe un parámetro time.Duration, por lo que necesitas multiplicar tus segundos enteros por time.Second para crear el valor de duración adecuado. Este desafío demuestra cómo usar time.Sleep para crear pausas temporizadas en la ejecución de un programa para aplicaciones prácticas como meditación guiada o temporizadores de ejercicio.

Hoja de referencia

Usa time.Sleep para pausar la ejecución del programa durante una duración específica:

time.Sleep(2 * time.Second)

Usa time.NewTicker para realizar acciones a intervalos regulares:

ticker := time.NewTicker(1 * time.Second)
for i := 0; i < 3; i++ {
    <-ticker.C // Esperar al siguiente tick
    fmt.Println("Tick", i+1)
}

Ambas funciones usan valores time.Duration. Convierte enteros a duración multiplicándolos por time.Second.

Pruébalo tú mismo

package main

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

func main() {
	// Leer la entrada usando bufio.Scanner para manejar los espacios correctamente
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	stepsInput := scanner.Text()
	
	scanner.Scan()
	cyclesInput := scanner.Text()
	
	// Analizar los pasos y ciclos de meditación
	steps := strings.Split(stepsInput, ",")
	cycles, _ := strconv.Atoi(cyclesInput)
	
	// TODO: Escribe tu código a continuación
	// Analizar cada paso para extraer la instrucción y la duración
	// Recuerda verificar si el slice de partes tiene suficientes elementos antes de acceder
	// Mostrar el encabezado y la configuración de la sesión
	// Iterar a través de los ciclos y pasos
	// Usar time.Sleep para las pausas (considera usar milisegundos para las pruebas)
	// Mostrar los mensajes de finalización y el resumen
	
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo