Go Academy · Lektion

Tickers för intervall

Upprepa med fasta intervall

Lektion 3 av 413 steg

Tickers för intervall är en gratis lektion i Go Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Go Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Go Academy innehåller totalt 4 lektioner.

Upprepning med fast frekvens

När du bara behöver göra något var N:e sekund är en Ticker rätt verktyg. Till skillnad från en loop med sleep körs den med en jämn takt och påverkas inte av den tid arbetet tar.

Skapa en Ticker

time.NewTicker(d) returnerar en Ticker vars kanal C tar emot den aktuella tiden varje d.

ticker := time.NewTicker(time.Second)
defer ticker.Stop()

Stoppa alltid en Ticker

En ticker håller en intern timer aktiv. Om du aldrig anropar Stop() läcker den. Använd defer ticker.Stop() direkt efter att du har skapat den.

Iterera över kanalen

Du kan iterera över tickerkanalen för att reagera på varje tick.

for t := range ticker.C {
    fmt.Println("tick at", t)
}

Stoppa med select

Kombinera tickern med en done-kanal så att loopen kan avslutas på ett ordnat sätt.

for {
    select {
    case <-ticker.C:
        doWork()
    case <-done:
        return
    }
}

Ticker jämfört med Timer

Viktig skillnad:

  • Timer utlöses en gång efter en fördröjning
  • Ticker utlöses upprepade gånger med ett visst intervall

Använd en Timer för tidsgränser som bara ska inträffa en gång och en Ticker för periodiskt arbete.

Bekvämligheten med time.Tick

time.Tick(d) returnerar bara kanalen. Det är praktiskt men kan inte stoppas, så det orsakar läckor i långlivade program. Föredra NewTicker framför detta i andra program än korta skript.

for range time.Tick(time.Second) {
    // simple, but cannot Stop -> avoid in servers
}

Hantera långsamt arbete

Om arbetet tar längre tid än intervallet köas ticks inte; tickern släpper ticks i stället för att skicka dem i en klump. Du får alltså aldrig en kö, men kan missa ticks under hög belastning.

Justera frekvensen

För att ändra intervallet skapar du en ny ticker. Go 1.15+ erbjuder också ticker.Reset(d) för att ändra perioden utan att allokera på nytt.

ticker.Reset(500 * time.Millisecond)

Kontextavbrytning

I riktiga tjänster bör du styra tickerloopar med en context.Context så att avstängningssignaler stoppar dem på ett ordnat sätt.

case <-ctx.Done():
    return ctx.Err()

Körbart: Ticker med fast frekvens

Det här fristående programmet tickar tre gånger med ett fast intervall och stoppar sedan på ett ordnat sätt med hjälp av en räknare.

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")
}

Snabbtest

Testa dina kunskaper om tickers.

Sammanfattning

Du har lärt dig hur tickers används för intervall:

  • time.NewTicker(d) utlöses varje d på sin C-kanal
  • Använd alltid defer ticker.Stop() för att undvika läckor
  • Tickers släpper ticks vid långsamt arbete i stället för att skicka dem i en klump
  • Använd Reset för att ändra frekvensen och en context-/done-kanal för att avsluta
Gratis att börja

Lär dig Go med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”Tickers för intervall” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Go Academy, inklusive ”Tickers för intervall”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Go Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Tickers för intervall”?

Upprepa med fasta intervall Ni övar på Go Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Go Academy?

Du behöver inga förkunskaper. Utbildningen i Go Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Tickers för intervall”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Go Academy-lektionen?

Ja. Varje Go Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Tidsbaserad schemaläggning
  2. Biblioteket robfig/cron
  3. Tickers för intervall
  4. Kontrollerad jobbavstängning
← Tillbaka till Go Academy