Récapitulatif - Minuteur simple
Fait partie de la section Logique & Flux du Journey GO de Coddy. Leçon 65 sur 68.
Défi
FacileCréez une application de compte à rebours qui utilise time.NewTicker pour effectuer un compte à rebours depuis une durée spécifiée jusqu’à zéro, en affichant des messages de progression à intervalles réguliers. Ce défi mettra à l’épreuve votre capacité à combiner des tickers, des boucles et des calculs de durée afin de créer une application de chronométrage fonctionnelle.
Vous recevrez deux entrées :
- Une chaîne contenant la durée du compte à rebours au format
"value:unit"(par exemple,"10:Second"ou"3:Minute") - Une chaîne contenant l’intervalle de mise à jour au format
"value:unit"(par exemple,"1:Second")
Votre tâche consiste à :
- Analyser la première entrée en la séparant au niveau des deux-points afin d’extraire la valeur et l’unité de la durée du compte à rebours
- Analyser la deuxième entrée en la séparant au niveau des deux-points afin d’extraire la valeur et l’unité de l’intervalle de mise à jour
- Convertir les valeurs chaîne en entiers à l’aide du package
strconv - Créer des objets
time.Durationpour la durée du compte à rebours et l’intervalle de mise à jour en utilisant les constantes appropriées :- Pour
"Second": multiplier partime.Second - Pour
"Minute": multiplier partime.Minute - Pour
"Hour": multiplier partime.Hour
- Pour
- Afficher l’en-tête du minuteur :
"=== COUNTDOWN TIMER ===" - Afficher la configuration du minuteur :
"Starting countdown from [countdown_duration_object]" - Afficher la fréquence de mise à jour :
"Updates every [update_interval_object]" - Créer un ticker à l’aide de
time.NewTickeravec la durée de l’intervalle de mise à jour - Initialiser une variable de temps restant avec la durée du compte à rebours
- Utiliser une boucle pour effectuer le compte à rebours :
- Attendre chaque événement du ticker à l’aide de
<-ticker.C - Soustraire l’intervalle de mise à jour du temps restant
- Si le temps restant est supérieur à 0, afficher :
"Time remaining: [remaining_time_object]" - Si le temps restant est inférieur ou égal à 0, afficher :
"Time's up!"et quitter la boucle
- Attendre chaque événement du ticker à l’aide de
- Arrêter le ticker à l’aide de
ticker.Stop() - Afficher les statistiques d’achèvement :
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(calculer combien de fois le temps restant a été affiché)
- Afficher le message d’achèvement :
"Countdown timer finished successfully"
Utilisez le package time pour les opérations liées au ticker et aux durées, le package strings pour séparer les chaînes d’entrée, le package strconv pour convertir les chaînes en entiers et le package fmt pour l’affichage. N’oubliez pas que time.NewTicker renvoie un ticker qui envoie des valeurs sur son canal à intervalles réguliers, et que vous devez appeler ticker.Stop() lorsque vous avez terminé afin de libérer les ressources. Ce défi montre comment créer un compte à rebours pratique à l’aide des mécanismes de temporisation de Go.
Essayez vous-même
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Lire l'entrée
var countdownInput string
var intervalInput string
fmt.Scanln(&countdownInput)
fmt.Scanln(&intervalInput)
// Analyser l'entrée de la durée du compte à rebours
countdownParts := strings.Split(countdownInput, ":")
countdownValue, _ := strconv.Atoi(countdownParts[0])
countdownUnit := countdownParts[1]
// Analyser l'entrée de l'intervalle de mise à jour
intervalParts := strings.Split(intervalInput, ":")
intervalValue, _ := strconv.Atoi(intervalParts[0])
intervalUnit := intervalParts[1]
// TODO: Écrivez votre code ci-dessous
// Convertir en objets time.Duration en utilisant des instructions switch
// Créer le minuteur de compte à rebours (simuler sans délais réels pour les tests)
// Implémenter la boucle du compte à rebours
// Afficher tous les messages et statistiques requis
// Remarque : Pour les besoins des tests, simulez le comportement du ticker sans délais de temps réels
}Toutes les leçons de Logique & Flux
1Structures de contrôle avancées
Switch avec `fallthrough`Sortir de boucles imbriquéesContinuer une boucle spécifiqueL'instruction `goto`Récapitulatif - Contrôle de boucle avancé4Projet : Liste de tâches simple
Configuration du projetAjouter une tâche7Gestion des erreurs en profondeur
Types d'erreurs personnalisésEnvelopper des erreurs avec `%w`Désenvelopper avec `errors.Is`Désenvelopper avec `errors.As`Comprendre `panic`Utiliser `recover`Récapitulatif - Division sécurisée10Travailler avec le temps
Obtenir l'heure actuelleCréer une heure spécifiqueFormatage de l'heureParsing de chaînes de tempsDurée temporelleArithmétique temporelleSleep et TickersRécapitulatif - Minuteur simple2Structures et Méthodes
Définir des méthodes sur des structuresReceveurs par valeurReceveurs par pointeurChoisir les receveursMéthodes vs FonctionsRécapitulatif - Comportement des structures5Les Maps en profondeur
Maps de StructsPointeurs comme valeurs de MapTester les Maps NilComparer des MapsRécapitulatif - Compteur de fréquence de mots3Interfaces (Les bases)
Qu'est-ce qu'une Interface ?Définir une InterfaceImplémenter une InterfaceUtiliser les types d'InterfaceInterface videAssertions de typeType SwitchRécapitulatif - Formes et comportementsEntraînez-vous par vous-même : Compilateur Go en ligne