1234567891011121314151617181920212223242526272829303132 |
- package utils
- import (
- "sync"
- "sync/atomic"
- "time"
- )
- var (
- timestampTimer sync.Once
- // Timestamp please start the timer function before you use this value
- // please load the value with atomic `atomic.LoadUint32(&utils.Timestamp)`
- Timestamp uint32
- )
- // StartTimeStampUpdater starts a concurrent function which stores the timestamp to an atomic value per second,
- // which is much better for performance than determining it at runtime each time
- func StartTimeStampUpdater() {
- timestampTimer.Do(func() {
- // set initial value
- atomic.StoreUint32(&Timestamp, uint32(time.Now().Unix()))
- go func(sleep time.Duration) {
- ticker := time.NewTicker(sleep)
- defer ticker.Stop()
- for t := range ticker.C {
- // update timestamp
- atomic.StoreUint32(&Timestamp, uint32(t.Unix()))
- }
- }(1 * time.Second) // duration
- })
- }
|