A high performance timer with minimal goroutines.
- One goroutine runs all
- Goroutine safe
- Clean and simple, no third-party deps at all
- High performance with timing-wheels algorithm
- Minimal resources use
- Managed data and handler
- Customizing channel
- Well tested
packagemain
import(
"log"
"time"
timer"github /singchia/go-timer/v2"
)
funcmain() {
t1:=time.Now()
// new timer
t:=timer.NewTimer()
// add a tick in 1s
tick:=t.Add(time.Second)
// wait for it
<-tick.C()
// tick fired as time is up, calculate and print the elapse
log.Printf("time elapsed: %fs\n",time.Now().Sub(t1).Seconds())
}
packagemain
import(
"log"
"sync"
"time"
timer"github /singchia/go-timer/v2"
)
funcmain() {
// we need a wait group since using async handler
wg:=sync.WaitGroup{}
wg.Add(1)
// new timer
t:=timer.NewTimer()
// add a tick in 1s with current time and a async handler
t.Add(time.Second,timer.WithData(time.Now()),timer.WithHandler(func(event*timer.Event) {
deferwg.Done()
// tick fired as time is up, calculate and print the elapse
log.Printf("time elapsed: %fs\n",time.Now().Sub(event.Data.(time.Time)).Seconds())
}))
wg.Wait()
}
packagemain
import(
"log"
"time"
timer"github /singchia/go-timer/v2"
)
funcmain() {
t1:=time.Now()
// new timer
t:=timer.NewTimer()
// add cyclical tick in 1s
tick:=t.Add(time.Second,timer.WithCyclically())
for{
// wait for it cyclically
<-tick.C()
t2:=time.Now()
// calculate and print the elapse
log.Printf("time elapsed: %fs\n",t2.Sub(t1).Seconds())
t1=t2
}
}
© Austin Zhai, 2015-2025
Released under theApache License 2.0