Resumen - Temporizador simple
Parte de la sección Lógica y Flujo del Journey de GO de Coddy. Lección 65 de 68.
Desafío
FácilCrea una aplicación de temporizador de cuenta regresiva que utilice time.NewTicker para contar hacia atrás desde una duración especificada hasta cero, mostrando mensajes de progreso a intervalos regulares. Este desafío pondrá a prueba tu capacidad para combinar tickers, bucles y cálculos de duración para crear una aplicación de temporización funcional.
Recibirás dos entradas:
- Una cadena que contiene la duración de la cuenta regresiva en el formato
"value:unit"(por ejemplo,"10:Second"o"3:Minute") - Una cadena que contiene el intervalo de actualización en el formato
"value:unit"(por ejemplo,"1:Second")
Tu tarea es:
- Analizar la primera entrada dividiéndola por los dos puntos para extraer el valor y la unidad de la duración de la cuenta regresiva
- Analizar la segunda entrada dividiéndola por los dos puntos para extraer el valor y la unidad del intervalo de actualización
- Convertir los valores de cadena a enteros usando el paquete
strconv - Crear objetos
time.Durationtanto para la duración de la cuenta regresiva como para el intervalo de actualización utilizando las constantes apropiadas:- Para
"Second": multiplicar portime.Second - Para
"Minute": multiplicar portime.Minute - Para
"Hour": multiplicar portime.Hour
- Para
- Mostrar el encabezado del temporizador:
"=== COUNTDOWN TIMER ===" - Mostrar la configuración del temporizador:
"Starting countdown from [countdown_duration_object]" - Mostrar la frecuencia de actualización:
"Updates every [update_interval_object]" - Crear un ticker usando
time.NewTickercon la duración del intervalo de actualización - Inicializar una variable de tiempo restante con la duración de la cuenta regresiva
- Usar un bucle para la cuenta regresiva:
- Esperar cada evento del ticker usando
<-ticker.C - Restar el intervalo de actualización del tiempo restante
- Si el tiempo restante es mayor que 0, mostrar:
"Time remaining: [remaining_time_object]" - Si el tiempo restante es 0 o menos, mostrar:
"Time's up!"y salir del bucle
- Esperar cada evento del ticker usando
- Detener el ticker usando
ticker.Stop() - Mostrar estadísticas de finalización:
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(calcula cuántas veces se mostró el tiempo restante)
- Mostrar el mensaje de finalización:
"Countdown timer finished successfully"
Usa el paquete time para las operaciones de ticker y duración, 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.NewTicker devuelve un ticker que envía valores por su canal a intervalos regulares, y debes llamar a ticker.Stop() cuando hayas terminado para liberar recursos. Este desafío demuestra cómo crear un temporizador de cuenta regresiva práctico utilizando los mecanismos de temporización de Go.
Pruébalo tú mismo
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Leer entrada
var countdownInput string
var intervalInput string
fmt.Scanln(&countdownInput)
fmt.Scanln(&intervalInput)
// Analizar la entrada de la duración de la cuenta regresiva
countdownParts := strings.Split(countdownInput, ":")
countdownValue, _ := strconv.Atoi(countdownParts[0])
countdownUnit := countdownParts[1]
// Analizar la entrada del intervalo de actualización
intervalParts := strings.Split(intervalInput, ":")
intervalValue, _ := strconv.Atoi(intervalParts[0])
intervalUnit := intervalParts[1]
// TODO: Escribe tu código a continuación
// Convertir a objetos time.Duration usando sentencias switch
// Crear el temporizador de cuenta regresiva (simular sin retrasos reales para pruebas)
// Implementar el bucle de cuenta regresiva
// Mostrar todos los mensajes y estadísticas requeridos
// Nota: Para fines de prueba, simula el comportamiento del ticker sin retrasos de tiempo reales
}Todas las lecciones de Lógica y Flujo
1Flujo de control avanzado
Switch con `fallthrough`Salir de bucles anidadosContinuar un bucle específicoLa sentencia `goto`Repaso: Control de bucles avanzado4Proyecto: Lista de tareas sencilla
Configuración del proyectoAñadir una tarea7Manejo de errores a fondo
Tipos de error personalizadosEnvolver errores con `%w`Desenvolver con `errors.Is`Desenvolver con `errors.As`Entendiendo `panic`Uso de `recover`Repaso - División segura10Trabajando con el tiempo
Obtener la hora actualCrear una hora específicaFormatear el tiempoParsing de cadenas de tiempoDuración del tiempoAritmética de tiempoSleeping y TickersResumen - Temporizador simple2Estructuras y Métodos
Definición de métodos en estructurasReceptores de valorReceptores de punteroElegir receptoresMétodos vs FuncionesResumen - Comportamiento de estructuras5Mapas en profundidad
Mapas de StructsPunteros como valores de MapVerificación de Maps NilComparación de MapsResumen - Contador de frecuencia de palabras3Interfaces (Conceptos básicos)
¿Qué es una interfaz?Definir una interfazImplementar una interfazUso de tipos de interfazInterfaz vacíaAserciones de tipoType SwitchResumen: Formas y comportamientosPractica por tu cuenta: Compilador de Go online