Resumen - Temporizador simple
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 65 de 68.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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 comportamientos