Code Fix

上級recoverは同じgoroutine内のpanicしか捕まえない › パターン2

recoverは同じgoroutine内のpanicしか捕まえない

recoverはそれを呼び出したgoroutine内で発生したpanicしか回復できません。

 1  package main
 2  
 3  import (
 4  	"fmt"
 5  	"time"
 6  )
 7  
 8  func task() {
 9  	panic("fail")
10  }
11  
12  func main() {
13  	defer func() {
14  		if r := recover(); r != nil {
15  			fmt.Println("recovered:", r)
16  		}
17  	}()
18  	______________________
                ^
19  	time.Sleep(100 * time.Millisecond)
20  }
panic: fail

空欄を埋めて実行を通す

広告
広告スロット(未設定)

recoverは同じgoroutine内のpanicしか捕まえない

別のgoroutine内でdeferとrecoverを仕込んでも、他のgoroutineのpanicは捕まえられずプログラム全体がクラッシュします。

このエラーの解説と類題をまとめて見る →

広告
広告スロット(未設定)