Last active
July 26, 2025 05:23
-
-
Save arshamalh/f89004c496c69872015801a761da98f6 to your computer and use it in GitHub Desktop.
Session Based Ticker
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"time" | |
) | |
type SessionBasedTicker struct { | |
start time.Time | |
end time.Time | |
tick <-chan time.Time | |
} | |
func NewSessionBasedTicker(start, end time.Time, duration time.Duration) *SessionBasedTicker { | |
return &SessionBasedTicker{ | |
start: start, | |
end: end, | |
tick: time.Tick(duration), | |
} | |
} | |
func (sbt *SessionBasedTicker) Tick() <-chan time.Time { | |
sessionTick := make(chan time.Time) | |
go func() { | |
for tickTime := range sbt.tick { | |
if tickTime.After(sbt.start) && tickTime.Before(sbt.end) { | |
sessionTick <- tickTime | |
} | |
} | |
}() | |
return sessionTick | |
} | |
func main() { | |
// Ticks from now till the next hour, every second. | |
sbt := NewSessionBasedTicker(time.Now().Add(time.Second*10), time.Now().Add(time.Hour), time.Second) | |
for range sbt.Tick() { | |
fmt.Println("hi") | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"time" | |
) | |
func NewSessionBasedTicker(start, end time.Time, duration time.Duration) <-chan time.Time { | |
sessionTick := make(chan time.Time) | |
go func() { | |
for tickTime := range time.Tick(duration) { | |
if tickTime.After(start) && tickTime.Before(end) { | |
sessionTick <- tickTime | |
} | |
} | |
}() | |
return sessionTick | |
} | |
func main() { | |
// Ticks from now till the next hour, every second. | |
sbt := NewSessionBasedTicker(time.Now().Add(time.Second*10), time.Now().Add(time.Hour), time.Second) | |
for range sbt { | |
fmt.Println("hi") | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment