panic() または recover() を直接呼び出している defer および go ステートメントを報告します。
このようなステートメントはほぼ無意味であり、panic() と recover() のメカニズムを誤用している可能性があります。
具体的には、以下のステートメントが該当します。
go panic(): 新しく開始されたゴルーチンは即座に panic を起こします。defer panic(): このステートメントを含む関数は終了時に必ず panic を起こします。go recover(): 新しく開始されたゴルーチンは panic を起こさないため、無意味です。defer recover(): このステートメントを含む関数は警告を出さずに panic を停止します。 このような使用方法は有効ではあるものの、recover() が返す値を検査するのが一般的です。
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from: ", r)
}
}()
Go のステートメントや panic の処理に関する詳細は、Go 言語仕様に掲載されている「Handling panics」および「Go statements」ページを参照してください。