Tickers para intervalos
Repita em taxas fixas
Tickers para intervalos é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.
Repetição em uma taxa fixa
Quando você simplesmente precisa fazer algo a cada N segundos, um marcador periódico é a ferramenta certa. Ao contrário de um laço com pausa, ele é acionado em uma cadência constante e não sofre desvios causados pelo tempo de trabalho.
Criando um marcador periódico
time.NewTicker(d) retorna um marcador periódico cujo canal C recebe o horário atual a cada d.
ticker := time.NewTicker(time.Second)
defer ticker.Stop()Sempre pare um marcador periódico
Um marcador periódico mantém um temporizador interno ativo. Se você nunca chamar Stop(), haverá um vazamento. Use defer ticker.Stop() logo após criá-lo.
Percorrendo o canal
Você pode percorrer o canal do marcador periódico para reagir a cada pulso.
for t := range ticker.C {
fmt.Println("tick at", t)
}Parando com select
Combine o marcador periódico com um canal de conclusão para que o laço possa sair corretamente.
for {
select {
case <-ticker.C:
doWork()
case <-done:
return
}
}Marcador periódico versus temporizador
Diferença principal:
- Temporizador é acionado uma vez após um atraso
- Marcador periódico é acionado repetidamente em um intervalo
Use um temporizador para tempos limite de execução única e um marcador periódico para trabalho periódico.
Conveniência de time.Tick
time.Tick(d) retorna apenas o canal. É conveniente, mas não pode ser interrompido, portanto causa um vazamento quando usado em programas de longa duração. Prefira NewTicker fora de scripts rápidos.
for range time.Tick(time.Second) {
// simple, but cannot Stop -> avoid in servers
}Lidando com trabalho lento
Se o seu trabalho levar mais tempo do que o intervalo, os pulsos não serão enfileirados; o marcador periódico descarta pulsos em vez de dispará-los em sequência. Assim, você nunca terá um acúmulo, mas poderá perder pulsos sob carga.
Ajustando a taxa
Para alterar o intervalo, crie um novo marcador periódico. O Go 1.15+ também oferece ticker.Reset(d) para alterar o período sem realocar.
ticker.Reset(500 * time.Millisecond)Cancelamento de contexto
Em serviços reais, controle os laços do marcador periódico com um context.Context para que os sinais de encerramento os parem corretamente.
case <-ctx.Done():
return ctx.Err()Executável: marcador periódico em taxa fixa
Este programa independente gera três pulsos em um intervalo fixo e depois para corretamente usando um contador.
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(10 * time.Millisecond)
defer ticker.Stop()
count := 0
for range ticker.C {
count++
fmt.Println("tick", count)
if count == 3 {
break
}
}
fmt.Println("done")
}Verificação rápida
Teste sua compreensão dos marcadores periódicos.
Recapitulação
Você aprendeu sobre marcadores periódicos para intervalos:
time.NewTicker(d)é acionado a cadadem seu canalC- Sempre use
defer ticker.Stop()para evitar vazamentos - Marcadores periódicos perdem pulsos durante trabalhos lentos, em vez de dispará-los em sequência
- Use
Resetpara alterar a taxa e um contexto/canal de conclusão para sair
Perguntas Frequentes
A aula “Tickers para intervalos” é grátis?
Sim — o texto completo de “Tickers para intervalos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.
O que vou aprender em “Tickers para intervalos”?
Repita em taxas fixas Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Go Academy?
Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Tickers para intervalos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Go Academy?
Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Agendamento baseado em tempo
- A biblioteca robfig/cron
- Tickers para intervalos
- Desligamento normal de tarefas