Zeitdauer
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 62 von 68.
Wenn Sie in Go mit Zeit arbeiten, müssen Sie oft Zeiträume darstellen – wie „5 Minuten“ oder „2 Stunden“. Go bietet den Typ time.Duration speziell für diesen Zweck an.
Ein time.Duration repräsentiert eine Zeitspanne zwischen zwei Zeitpunkten. Go enthält mehrere vordefinierte Konstanten, die das Erstellen von Zeitspannen einfach und lesbar machen:
tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.SecondDie am häufigsten verwendeten Zeitdauer-Konstanten sind time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute und time.Hour. Sie können diese Konstanten mit Ganzzahlen multiplizieren, um genau die Zeitdauer zu erstellen, die Sie benötigen.
Dauerwerte sind essenziell für die Zeitarithmetik, Planungsoperationen und die Steuerung des Timings in Ihren Programmen. Sie arbeiten nahtlos mit anderen Zeitfunktionen zusammen und bieten eine klare, lesbare Weise, Zeitspannen in Ihrem Code auszudrücken.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Aufgabe
EinfachErstellen Sie einen Workout-Session-Timer, der time.Duration verwendet, um verschiedene Übungsintervalle und Ruhephasen zu verfolgen. Diese Herausforderung testet Ihre Fähigkeit, Dauerwerte mithilfe der vordefinierten Konstanten von Go zu erstellen und Berechnungen mit ihnen durchzuführen.
Sie erhalten zwei Eingaben:
- Einen String, der Übungsdefinitionen im Format
"exercise1:duration_value:duration_unit,exercise2:duration_value:duration_unit"enthält (z. B."Push-ups:30:Second,Plank:2:Minute,Squats:45:Second") - Einen String, der Informationen zur Ruhephase im Format
"rest_duration_value:rest_duration_unit"enthält (z. B."15:Second")
Ihre Aufgabe ist es:
- Die erste Eingabe zu parsen, indem Sie sie an Kommas trennen, um einzelne Übungseinträge zu erhalten
- Für jeden Übungseintrag an Doppelpunkten zu trennen, um den Übungsnamen, den Dauerwert (als String) und die Zeiteinheit zu extrahieren
- Die zweite Eingabe zu parsen, indem Sie sie an Doppelpunkten trennen, um den Dauerwert und die Einheit der Ruhephase zu erhalten
- Dauerwerte von Strings in Ganzzahlen umzuwandeln und
time.Duration-Objekte unter Verwendung der entsprechenden Konstanten zu erstellen:- Für
"Second": Multiplikation mittime.Second - Für
"Minute": Multiplikation mittime.Minute - Für
"Hour": Multiplikation mittime.Hour
- Für
- Den Anwendungs-Header anzuzeigen:
"=== WORKOUT SESSION TIMER ===" - Das Session-Setup anzuzeigen:
"Setting up workout session..." - Für jede Übung anzuzeigen:
"Exercise: [exercise_name] - Duration: [duration_object]" - Die Ruhephase anzuzeigen:
"Rest period between exercises: [rest_duration_object]" - Die Aufschlüsselung der Session zu berechnen und anzuzeigen:
"=== SESSION BREAKDOWN ==="- Für jede Übung:
"[exercise_name]: [duration_in_seconds] seconds" "Rest periods: [rest_duration_in_seconds] seconds each"
- Die gesamte Session-Zeit zu berechnen (Summe aller Übungsdauern plus Ruhephasen zwischen den Übungen):
"=== TIMING CALCULATIONS ===""Total exercise time: [total_exercise_duration_object]""Total rest time: [total_rest_duration_object]"(Ruhephasen zwischen den Übungen, also eine weniger als die Anzahl der Übungen)"Complete session duration: [total_session_duration_object]"
- Session-Statistiken anzuzeigen:
"=== 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"
- Zeitumrechnungen anzuzeigen:
"=== TIME CONVERSIONS ===""Session duration in minutes: [total_minutes]"(Gesamtdauer der Session in Minuten umrechnen)"Session duration in hours: [total_hours]"(Gesamtdauer der Session in Stunden umrechnen, als Dezimalzahl anzeigen)
- Die Abschlussmeldung anzuzeigen:
"Workout session timer configured successfully"
Verwenden Sie das time-Paket, um mit Zeitdauern zu arbeiten, das strings-Paket, um Eingabestrings zu trennen, das strconv-Paket, um String-Zahlen in Ganzzahlen umzuwandeln, und das fmt-Paket für die formatierte Ausgabe. Denken Sie daran, dass time.Duration-Werte addiert und mit Methoden wie Seconds(), Minutes() und Hours() in verschiedene Einheiten umgerechnet werden können. Diese Herausforderung zeigt, wie man Dauerwerte für Timing-Anwendungen erstellt und manipuliert.
Spickzettel
Go bietet den Typ time.Duration an, um Zeitspannen zwischen zwei Zeitpunkten darzustellen.
Erstellen Sie Zeitspannen mithilfe vordefinierter Konstanten, multipliziert mit Ganzzahlen:
tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.SecondGängige Zeitspannen-Konstanten sind:
time.Nanosecondtime.Microsecondtime.Millisecondtime.Secondtime.Minutetime.Hour
Zeitspannen-Werte können addiert und mithilfe von Methoden wie Seconds(), Minutes() und Hours() in verschiedene Einheiten umgewandelt werden.
Probier es selbst
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Eingabe lesen
var exerciseInput string
var restInput string
fmt.Scanln(&exerciseInput)
fmt.Scanln(&restInput)
// Übungen aus der Eingabe parsen
exerciseEntries := strings.Split(exerciseInput, ",")
// Ruhephase aus der Eingabe parsen
restParts := strings.Split(restInput, ":")
// TODO: Schreiben Sie Ihren Code unten
// 1. Jeden Übungseintrag parsen, um Name, Dauerwert und Einheit zu extrahieren
// 2. Dauerwerte in Ganzzahlen umwandeln und time.Duration-Objekte erstellen
// 3. Ruhedauer parsen und time.Duration-Objekt erstellen
// 4. Informationen zur Trainingseinheit und Berechnungen anzeigen
// 5. Sitzungsstatistiken und Zeitumrechnungen berechnen
// Denken Sie daran, alle erforderlichen Informationen wie in der Aufgabe angegeben auszugeben
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und Verhalten