0Pricing
Go Academy · Aula

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 cada d em seu canal C
  • 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 Reset para 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

  1. Agendamento baseado em tempo
  2. A biblioteca robfig/cron
  3. Tickers para intervalos
  4. Desligamento normal de tarefas
← Voltar para Go Academy