Tickers för intervall
Upprepa med fasta intervall
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 varjedpå sinC-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
Resetför att ändra frekvensen och en context-/done-kanal för att avsluta
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
- Tidsbaserad schemaläggning
- Biblioteket robfig/cron
- Tickers för intervall
- Kontrollerad jobbavstängning