Recover from panics in goroutines by calling recover() inside a defer function within that goroutine.
func worker(id int) {
defer func() {
if r := recover(); r != nil {
fmt.Printf("goroutine %d panicked: %v\n", id, r)
}
}()
// code that might panic
panic("oops")
}
func main() {
for i := 0; i < 5; i++ {
go worker(i)
}
time.Sleep(time.Second) // wait for goroutines
}