Récapitulatif - Minuteur simple
Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 65 sur 68.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Défi
FacileCréez une application de compte à rebours qui utilise time.NewTicker pour décompter d'une durée spécifiée jusqu'à zéro, en affichant des messages de progression à intervalles réguliers. Ce défi testera votre capacité à combiner les tickers, les boucles et les calculs de durée pour 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 découpant sur les deux-points pour extraire la valeur et l'unité de la durée du compte à rebours
- Analyser la deuxième entrée en la découpant sur les deux-points pour extraire la valeur et l'unité de l'intervalle de mise à jour
- Convertir les valeurs de 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 décompter :
- Attendre chaque événement du ticker en utilisant
<-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 de 0 ou moins, afficher :
"Time's up!"et quitter la boucle
- Attendre chaque événement du ticker en utilisant
- Arrêter le ticker en utilisant
ticker.Stop() - Afficher les statistiques de fin :
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(calculez combien de fois le temps restant a été affiché)
- Afficher le message de fin :
"Countdown timer finished successfully"
Utilisez le package time pour les opérations de ticker et de durée, le package strings pour découper les chaînes d'entrée, le package strconv pour convertir les chaînes en entiers, et le package fmt pour la sortie. N'oubliez pas que time.NewTicker renvoie un ticker qui envoie des valeurs sur son canal à intervalles réguliers, et vous devez appeler ticker.Stop() lorsque vous avez terminé pour libérer les ressources. Ce défi démontre comment créer un compte à rebours pratique en utilisant les mécanismes de chronométrage 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 comportements