28 lines
564 B
Go
28 lines
564 B
Go
package tools
|
||
|
||
import "time"
|
||
|
||
// Ticker запускает функцию fn с указанным интервалом в отдельной горутине
|
||
// Возвращает канал для остановки тикера
|
||
func Ticker(fn func(), interval time.Duration) chan struct{} {
|
||
if interval <= 0 {
|
||
interval = time.Second
|
||
}
|
||
ticker := time.NewTicker(interval)
|
||
stopChan := make(chan struct{})
|
||
fn()
|
||
go func() {
|
||
for {
|
||
select {
|
||
case <-ticker.C:
|
||
fn()
|
||
case <-stopChan:
|
||
ticker.Stop()
|
||
return
|
||
}
|
||
}
|
||
}()
|
||
|
||
return stopChan
|
||
}
|