Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/uberswe/interval
Interval is a Go package which uses Golangs time.Duration to perform different functions. For example calling another function at set intervals
https://github.com/uberswe/interval
golang interval recurring
Last synced: about 2 months ago
JSON representation
Interval is a Go package which uses Golangs time.Duration to perform different functions. For example calling another function at set intervals
- Host: GitHub
- URL: https://github.com/uberswe/interval
- Owner: uberswe
- License: mit
- Created: 2021-02-09T23:38:40.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2021-02-13T13:42:14.000Z (almost 4 years ago)
- Last Synced: 2024-07-04T02:49:37.726Z (6 months ago)
- Topics: golang, interval, recurring
- Language: Go
- Homepage:
- Size: 9.77 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# interval
Interval is a package which uses Golangs time.Duration to perform different functions.
With the DoEvery functions it is possible to call a function in Golang every x seconds. Depending on the function you can do this in a blocking or asyncronous way.
It is also possible to check if enough time has passed between two times. Such as checking if something has executed 7 days before today for example.
To call a function repeatedly at a set interval simply do this
```go
func main() {
lambda := func(interval time.Duration, time time.Time, extra interface{}) {
log.Printf("do function called %s at %s\n", interval.String(), time.String())
}
err := interval.DoEvery("1s", nil, lambda, -1)
if err != nil {
log.Panicf("Error: %v", err)
}
log.Println("This is never called because DoEvery is blocking")
}
```By passing -1 to interval.DoEvery the function will run in an infinite loop.
You can use DoEveryAsync to call a function repeatedly in a non-blocking way like so
```go
func main() {
lambda := func(interval time.Duration, time time.Time, extra interface{}) {
log.Printf("do function called %s at %s\n", interval.String(), time.String())
}
exit, err := interval.DoEveryAsync("1s", nil, lambda, -1)
if err != nil {
log.Panicf("Error: %v", err)
}
log.Println("This is called because DoEveryAsync is non-blocking")
// sleep for 10 seconds
time.Sleep(time.Second * 10)
// exit the async
exit <- 1
}
```