野生Goroutine

go出去之后就不管了,一旦新的goroutine中出现崩溃,则进程崩溃

  1. // 不推荐
  2. func main() {
  3. go doSome()
  4. time.Sleep(10 * time.Second)
  5. }
  6. func doSome() {
  7. panic("野生goroutine")
  8. }

优雅处理野生Goroutine

  1. // 推荐
  2. func main() {
  3. go Go(doSome)
  4. time.Sleep(10 * time.Second)
  5. }
  6. func Go(f func()) {
  7. defer func() {
  8. if err := recover(); err != nil {
  9. fmt.Println(err)
  10. }
  11. }()
  12. f()
  13. }
  14. func doSome() {
  15. panic("野生goroutine")
  16. }