34 lines
479 B
Go
34 lines
479 B
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
func task() {
|
|
for {
|
|
time.Sleep(time.Millisecond * 200)
|
|
panic("unexpected situation")
|
|
}
|
|
}
|
|
|
|
func NeverExit(name string, action func()) {
|
|
defer func() {
|
|
if v := recover(); v != nil {
|
|
log.Println(name, "is crashed - restarting...")
|
|
go NeverExit(name, action)
|
|
}
|
|
}()
|
|
|
|
if action != nil {
|
|
action()
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
go NeverExit("first_goroutine", task)
|
|
go NeverExit("second_goroutine", task)
|
|
|
|
time.Sleep(time.Second)
|
|
}
|