Riepilogo - Timer semplice
Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 65 di 68.
Sfida
FacileCrea un'applicazione con timer per il conto alla rovescia che usa time.NewTicker per contare alla rovescia da una durata specificata fino a zero, mostrando messaggi di avanzamento a intervalli regolari. Questa sfida metterà alla prova la tua capacità di combinare ticker, cicli e calcoli delle durate per creare un'applicazione di cronometraggio funzionante.
Riceverai due input:
- Una stringa contenente la durata del conto alla rovescia nel formato
"value:unit"(ad es.,"10:Second"o"3:Minute") - Una stringa contenente l'intervallo di aggiornamento nel formato
"value:unit"(ad es.,"1:Second")
Il tuo compito è:
- Analizzare il primo input suddividendolo in corrispondenza dei due punti per estrarre il valore e l'unità della durata del conto alla rovescia
- Analizzare il secondo input suddividendolo in corrispondenza dei due punti per estrarre il valore e l'unità dell'intervallo di aggiornamento
- Convertire i valori stringa in interi usando il pacchetto
strconv - Creare oggetti
time.Durationsia per la durata del conto alla rovescia sia per l'intervallo di aggiornamento, usando le costanti appropriate:- Per
"Second": moltiplicare pertime.Second - Per
"Minute": moltiplicare pertime.Minute - Per
"Hour": moltiplicare pertime.Hour
- Per
- Mostrare l'intestazione del timer:
"=== COUNTDOWN TIMER ===" - Mostrare la configurazione del timer:
"Starting countdown from [countdown_duration_object]" - Mostrare la frequenza di aggiornamento:
"Updates every [update_interval_object]" - Creare un ticker usando
time.NewTickercon la durata dell'intervallo di aggiornamento - Inizializzare una variabile del tempo rimanente con la durata del conto alla rovescia
- Usare un ciclo per effettuare il conto alla rovescia:
- Attendere ogni evento del ticker usando
<-ticker.C - Sottrarre l'intervallo di aggiornamento dal tempo rimanente
- Se il tempo rimanente è maggiore di 0, mostrare:
"Time remaining: [remaining_time_object]" - Se il tempo rimanente è 0 o inferiore, mostrare:
"Time's up!"e uscire dal ciclo
- Attendere ogni evento del ticker usando
- Arrestare il ticker usando
ticker.Stop() - Mostrare le statistiche di completamento:
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(calcolare quante volte è stato mostrato il tempo rimanente)
- Mostrare il messaggio di completamento:
"Countdown timer finished successfully"
Usa il pacchetto time per le operazioni con ticker e durate, il pacchetto strings per suddividere le stringhe di input, il pacchetto strconv per convertire le stringhe in interi e il pacchetto fmt per l'output. Ricorda che time.NewTicker restituisce un ticker che invia valori sul suo canale a intervalli regolari e che, quando hai finito, devi chiamare ticker.Stop() per liberare le risorse. Questa sfida mostra come creare un pratico timer per il conto alla rovescia usando i meccanismi di cronometraggio di Go.
Provalo tu
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Leggi l'input
var countdownInput string
var intervalInput string
fmt.Scanln(&countdownInput)
fmt.Scanln(&intervalInput)
// Analizza l'input della durata del conto alla rovescia
countdownParts := strings.Split(countdownInput, ":")
countdownValue, _ := strconv.Atoi(countdownParts[0])
countdownUnit := countdownParts[1]
// Analizza l'input dell'intervallo di aggiornamento
intervalParts := strings.Split(intervalInput, ":")
intervalValue, _ := strconv.Atoi(intervalParts[0])
intervalUnit := intervalParts[1]
// TODO: Scrivi il tuo codice qui sotto
// Converti in oggetti time.Duration usando istruzioni switch
// Crea il timer del conto alla rovescia (simula senza ritardi effettivi per i test)
// Implementa il ciclo del conto alla rovescia
// Visualizza tutti i messaggi e le statistiche richiesti
// Nota: ai fini dei test, simula il comportamento del ticker senza ritardi reali
}Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
Switch con `fallthrough`Uscire dai cicli annidatiContinuare un ciclo specificoL'istruzione `goto`Riepilogo - Controllo avanzato dei cicli4Progetto: semplice lista di attività
Configurazione del progettoAggiungere un’attività7Gestione degli errori in dettaglio
Tipi di errore personalizzatiAvvolgere gli errori con `%w`Rimuovere il wrapping con `errors.Is`Rimuovere il wrapping con `errors.As`Capire `panic`Usare `recover`Riepilogo - Divisione sicura10Lavorare con il tempo
Ottenere l'ora correnteCreare un orario specificoFormattare l'oraAnalizzare stringhe di tempoDurata temporaleOperazioni aritmetiche con il tempoSospensioni e tickerRiepilogo - Timer semplice2Struct e metodi
Definire metodi sugli structReceiver per valoreReceiver con puntatoreScegliere i receiverMetodi vs funzioniRiepilogo - comportamento degli struct5Mappe in dettaglio
Mappe di structPuntatori come valori delle mappeVerificare le mappe nilConfrontare le mappeRiepilogo - Contatore della frequenza delle parole3Interfacce (le basi)
Che cos’è un’interfaccia?Definire un’interfacciaImplementare un’interfacciaUsare i tipi interfacciaInterfaccia vuotaAsserzioni di tipoSwitch di tipoRiepilogo: forme e comportamentiEsercitati da solo: Compilatore Go online