Прервать функцию с горутинами , если выполняется слишком долго
Задача, в функции нужно запустить несколько горутин с вычислениями и дождаться их окончания, но если функция будет работать больше указанного количества секунд прервать ее выполнение
минимальный пример
package main
import (
"fmt"
"sync"
)
func FibonacciRecursion(n int) int {
if n <= 1 {
return n
}
return FibonacciRecursion(n-1) + FibonacciRecursion(n-2)
}
func f(i int, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Println(FibonacciRecursion(45 + i))
}
func fun() {
var wg sync.WaitGroup
for i := 0; i < 3; i++ {
go f(i, &wg)
wg.Add(1)
}
wg.Wait()
println("Function ended")
}
func main() {
fun()
}
Надо прервать выполнение функции fun, как это сделать?
Источник: Stack Overflow на русском