Recapitulação - Timer Simples
Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 65 de 68.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilCrie um aplicativo de cronômetro de contagem regressiva que use time.NewTicker para fazer a contagem regressiva de uma duração especificada até zero, exibindo mensagens de progresso em intervalos regulares. Este desafio testará sua habilidade de combinar tickers, loops e cálculos de duração para criar uma aplicação de cronometragem funcional.
Você receberá duas entradas:
- Uma string contendo a duração da contagem regressiva no formato
"value:unit"(ex:"10:Second"ou"3:Minute") - Uma string contendo o intervalo de atualização no formato
"value:unit"(ex:"1:Second")
Sua tarefa é:
- Analisar a primeira entrada dividindo-a nos dois pontos para extrair o valor e a unidade da duração da contagem regressiva
- Analisar a segunda entrada dividindo-a nos dois pontos para extrair o valor e a unidade do intervalo de atualização
- Converter os valores de string para inteiros usando o pacote
strconv - Criar objetos
time.Durationtanto para a duração da contagem regressiva quanto para o intervalo de atualização usando as constantes apropriadas:- Para
"Second": multiplique portime.Second - Para
"Minute": multiplique portime.Minute - Para
"Hour": multiplique portime.Hour
- Para
- Exibir o cabeçalho do cronômetro:
"=== COUNTDOWN TIMER ===" - Exibir a configuração do cronômetro:
"Starting countdown from [countdown_duration_object]" - Exibir a frequência de atualização:
"Updates every [update_interval_object]" - Criar um ticker usando
time.NewTickercom a duração do intervalo de atualização - Inicializar uma variável de tempo restante com a duração da contagem regressiva
- Usar um loop para a contagem regressiva:
- Aguardar por cada evento do ticker usando
<-ticker.C - Subtrair o intervalo de atualização do tempo restante
- Se o tempo restante for maior que 0, exibir:
"Time remaining: [remaining_time_object]" - Se o tempo restante for 0 ou menos, exibir:
"Time's up!"e sair do loop
- Aguardar por cada evento do ticker usando
- Parar o ticker usando
ticker.Stop() - Exibir estatísticas de conclusão:
"=== TIMER COMPLETE ===""Original duration: [countdown_duration_object]""Update interval: [update_interval_object]""Total updates displayed: [number_of_updates]"(calcule quantas vezes o tempo restante foi exibido)
- Exibir a mensagem de conclusão:
"Countdown timer finished successfully"
Use o pacote time para operações de ticker e duração, o pacote strings para dividir as strings de entrada, o pacote strconv para converter strings em inteiros e o pacote fmt para saída. Lembre-se que time.NewTicker retorna um ticker que envia valores em seu canal em intervalos regulares, e você deve chamar ticker.Stop() quando terminar para liberar recursos. Este desafio demonstra como criar um cronômetro de contagem regressiva prático usando os mecanismos de temporização do Go.
Experimente você mesmo
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// Ler entrada
var countdownInput string
var intervalInput string
fmt.Scanln(&countdownInput)
fmt.Scanln(&intervalInput)
// Analisar a entrada da duração da contagem regressiva
countdownParts := strings.Split(countdownInput, ":")
countdownValue, _ := strconv.Atoi(countdownParts[0])
countdownUnit := countdownParts[1]
// Analisar a entrada do intervalo de atualização
intervalParts := strings.Split(intervalInput, ":")
intervalValue, _ := strconv.Atoi(intervalParts[0])
intervalUnit := intervalParts[1]
// TODO: Escreva seu código abaixo
// Converter para objetos time.Duration usando instruções switch
// Criar o cronômetro de contagem regressiva (simular sem atrasos reais para testes)
// Implementar o loop de contagem regressiva
// Exibir todas as mensagens e estatísticas necessárias
// Nota: Para fins de teste, simule o comportamento do ticker sem atrasos de tempo reais
}Todas as lições de Lógica & Fluxo
1Fluxo de Controle Avançado
Switch com `fallthrough`Interrompendo Loops AninhadosContinuando um Loop EspecíficoA Instrução `goto`Recapitulação - Controle de Loop Avançado4Projeto: Lista de Tarefas Simples
Configuração do ProjetoAdicionando uma Tarefa7Tratamento de Erros em Profundidade
Tipos de Erro PersonalizadosWrapping de Erros com `%w`Unwrapping com `errors.Is`Unwrapping com `errors.As`Entendendo o `panic`Usando o `recover`Recapitulação - Divisão Segura10Trabalhando com Tempo
Obtendo o Horário AtualCriando um Horário EspecíficoFormatando o TempoParsing de Strings de TempoDuração de TempoAritmética de TempoSleep e TickersRecapitulação - Timer Simples2Structs e Métodos
Definindo Métodos em StructsRecebedores de ValorRecebedores de PonteiroEscolhendo RecebedoresMétodos vs FunçõesRecapitulação - Comportamento de Structs5Mapas em Profundidade
Mapas de StructsPonteiros como Valores de MapVerificando Mapas NilComparando MapasRecapitulação - Contador de Frequência de Palavras3Interfaces (O Básico)
O que é uma Interface?Definindo uma InterfaceImplementando uma InterfaceUsando Tipos de InterfaceInterface VaziaAsserções de TipoType SwitchRecapitulação - Formas e Comportamentos