Durée temporelle
Fait partie de la section Logique & Flux du Journey GO de Coddy. Leçon 62 sur 68.
Lorsque vous travaillez avec le temps en Go, vous devrez souvent représenter des durées — comme « 5 minutes » ou « 2 heures ». Go fournit le type time.Duration spécifiquement à cette fin.
Un time.Duration représente un intervalle de temps entre deux instants. Go inclut plusieurs constantes prédéfinies qui rendent la création de durées simple et lisible :
tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.SecondLes constantes de durée les plus couramment utilisées sont time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute et time.Hour. Vous pouvez multiplier ces constantes par des entiers pour créer la durée exacte dont vous avez besoin.
Les valeurs de durée sont essentielles pour l’arithmétique temporelle, les opérations de planification et le contrôle du minutage dans vos programmes. Elles fonctionnent parfaitement avec d’autres fonctions temporelles et offrent une manière claire et lisible d’exprimer des intervalles de temps dans votre code.
Défi
FacileCréez un minuteur de séance d’entraînement qui utilise time.Duration pour suivre différents intervalles d’exercice et périodes de repos. Ce défi mettra à l’épreuve votre capacité à créer des valeurs de durée à l’aide des constantes prédéfinies de Go et à effectuer des calculs avec celles-ci.
Vous recevrez deux entrées :
- Une chaîne contenant les définitions des exercices au format
"exercise1:duration_value:duration_unit,exercise2:duration_value:duration_unit"(par exemple,"Push-ups:30:Second,Plank:2:Minute,Squats:45:Second") - Une chaîne contenant les informations sur la période de repos au format
"rest_duration_value:rest_duration_unit"(par exemple,"15:Second")
Votre tâche consiste à :
- Analyser la première entrée en la séparant sur les virgules afin d’obtenir les entrées d’exercices individuelles
- Pour chaque entrée d’exercice, la séparer sur les deux-points afin d’extraire le nom de l’exercice, la valeur de durée (sous forme de chaîne) et l’unité de durée
- Analyser la deuxième entrée en la séparant sur les deux-points afin d’obtenir la valeur et l’unité de la durée du repos
- Convertir les valeurs de durée des chaînes en entiers et créer des objets
time.Durationà l’aide des constantes appropriées :- Pour
"Second": multiplier partime.Second - Pour
"Minute": multiplier partime.Minute - Pour
"Hour": multiplier partime.Hour
- Pour
- Afficher l’en-tête de l’application :
"=== WORKOUT SESSION TIMER ===" - Afficher la configuration de la séance :
"Setting up workout session..." - Pour chaque exercice, afficher :
"Exercise: [exercise_name] - Duration: [duration_object]" - Afficher la période de repos :
"Rest period between exercises: [rest_duration_object]" - Calculer et afficher la décomposition de la séance :
"=== SESSION BREAKDOWN ==="- Pour chaque exercice :
"[exercise_name]: [duration_in_seconds] seconds" "Rest periods: [rest_duration_in_seconds] seconds each"
- Calculer la durée totale de la séance (la somme de toutes les durées d’exercice plus les périodes de repos entre les exercices) :
"=== TIMING CALCULATIONS ===""Total exercise time: [total_exercise_duration_object]""Total rest time: [total_rest_duration_object]"(périodes de repos entre les exercices, soit une de moins que le nombre d’exercices)"Complete session duration: [total_session_duration_object]"
- Afficher les statistiques de la séance :
"=== SESSION STATISTICS ===""Number of exercises: [number_of_exercises]""Longest exercise: [longest_exercise_name] ([longest_duration_object])""Shortest exercise: [shortest_exercise_name] ([shortest_duration_object])""Average exercise duration: [average_duration_in_seconds] seconds"
- Afficher les conversions de temps :
"=== TIME CONVERSIONS ===""Session duration in minutes: [total_minutes]"(convertir la durée totale de la séance en minutes)"Session duration in hours: [total_hours]"(convertir la durée totale de la séance en heures, sous forme décimale)
- Afficher le message de fin :
"Workout session timer configured successfully"
Utilisez le package time pour travailler avec les durées, le package strings pour séparer les chaînes d’entrée, le package strconv pour convertir les nombres sous forme de chaînes en entiers, et le package fmt pour produire une sortie formatée. N’oubliez pas que les valeurs time.Duration peuvent être additionnées et converties en différentes unités à l’aide de méthodes telles que Seconds(), Minutes() et Hours(). Ce défi montre comment créer et manipuler des valeurs de durée pour des applications de chronométrage.
Essayez vous-même
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Lire l'entrée
var exerciseInput string
var restInput string
fmt.Scanln(&exerciseInput)
fmt.Scanln(&restInput)
// Analyser les exercices à partir de l'entrée
exerciseEntries := strings.Split(exerciseInput, ",")
// Analyser la période de repos à partir de l'entrée
restParts := strings.Split(restInput, ":")
// TODO: Écrivez votre code ci-dessous
// 1. Analyser chaque entrée d'exercice pour extraire le nom, la valeur de durée et l'unité
// 2. Convertir les valeurs de durée en entiers et créer des objets time.Duration
// 3. Analyser la durée de repos et créer un objet time.Duration
// 4. Afficher les informations de la séance d'entraînement et les calculs
// 5. Calculer les statistiques de la séance et les conversions de temps
// N'oubliez pas d'afficher toutes les informations requises comme spécifié dans le défi
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
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