Как обработать панику в горутине в Go?
Мне нужно безопасно запускать горутины, которые могут вызывать панику. Как перехватыватить панику внутри горутины и вернуть ошибку в основную горутину?
Безопасно означает, что паника в горутине обрабатывается без завершения всего приложения
package main
import (
"fmt"
"time"
)
func riskyFunction() {
panic("something went wrong")
}
func safeGoRoutine() error {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from:", r)
}
}()
riskyFunction()
return fmt.Errorf("riskyFunction completed without panicking")
}
func main() {
go func() {
err := safeGoRoutine()
if err != nil {
fmt.Println(err)
}
}()
time.Sleep(time.Second) // Дать время для выполнения горутины
}