Ce face time.Tick
time.Tick(d) este o scurtătură pentru time.NewTicker(d).C: un canal care „bate” la fiecare d. Îl parcurgi cu for range sau îl folosești într-un select. Dacă d <= 0, returnează nil.
Din Go 1.23, ticker-ul din spate este eliberat automat când nu mai este folosit, deci time.Tick este bun și în programe care rulează mult. Dacă ai nevoie să oprești sau să schimbi intervalul, folosește time.NewTicker (cu Stop și Reset).
Parametri
| Parametru | Descriere |
|---|---|
d |
Intervalul dintre bătăi. |
Ce returnează
Un canal doar pentru citire (<-chan time.Time).
Exemple
Exemplul 1: Trei verificări la interval fix
package main
import (
"fmt"
"time"
)
func main() {
n := 0
for range time.Tick(100 * time.Millisecond) {
n++
fmt.Printf("Verificarea %d a serverului\n", n)
if n == 3 {
break
}
}
fmt.Println("Gata")
}
Rezultat
Verificarea 1 a serverului
Verificarea 2 a serverului
Verificarea 3 a serverului
Gata
Exemplul 2: Bătăi și o oprire într-un select
Bucla primește bătăi până când sosește semnalul de oprire după 350 ms: 3 bătăi la 100, 200, 300 ms.
package main
import (
"fmt"
"time"
)
func main() {
bataie := time.Tick(100 * time.Millisecond)
stop := time.After(350 * time.Millisecond)
salvari := 0
for {
select {
case <-bataie:
salvari++
fmt.Println("Salvare automată", salvari)
case <-stop:
fmt.Println("Oprit după", salvari, "salvări")
return
}
}
}
Rezultat
Salvare automată 1
Salvare automată 2
Salvare automată 3
Oprit după 3 salvări
Greșeli frecvente
- Dai o durată calculată care poate fi 0:
time.Tick(0)returneazănil, iar citirea dintr-un canalnilblochează pentru totdeauna. - Faci o operație care durează mai mult decât intervalul: bătăile pierdute nu se adună, canalul ține cel mult una. Ritmul real va fi mai rar decât crezi.
Comenzi înrudite
time.Ticker: Un ceas care trimite câte o valoare pe canalul C la fiecare interval; Stop îl oprește, Reset îi schimbă intervalul.time.After: Returnează un canal care primește ora curentă după durata dată; folosit în select pentru limite de timp (timeout).time.Timer: Un temporizator care trimite un singur semnal pe canalul C după o durată; poate fi oprit (Stop) sau repornit (Reset).