Как обработать панику в горутине в 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) // Дать время для выполнения горутины
}

Ответы (0 шт):