recover() 関数を使用すると、現在の関数コンテキストでパニックを捕捉し、プログラムのクラッシュを防ぎ、エラーを適切に処理できます。recover() は、パニックが発生していない場合は nil を返し、捕捉されないパニックが発生した場合、または関数から回復する場合は戻ります。パニックが発生しました パニック値。関数呼び出しの周囲に遅延コールバックを追加して、パニックをキャッチし、エラー情報のログ記録などのカスタム処理を実行します。 reverse() は、現在の関数コンテキスト内のパニックのみをキャプチャし、パニックをキャンセルせず、未処理のエラーに対してのみ機能します。
Golangのrecover()関数を使用してパニックを処理する方法
はじめに
パニックは、プログラムが処理できないエラーに遭遇した場合、Go言語の特別なエラー処理メカニズムです。プログラムがクラッシュする。 recover()
関数はパニックを捕捉して処理し、プログラムがエラーから正常に回復できるようにします。 recover()
函数可以捕获并处理恐慌,允许程序优雅地从错误中恢复。
recover()
函数
recover()
函数是一个内置函数,可以从当前函数上下文中捕获最近发生的恐慌。它在以下情况下返回:
如果未发生恐慌,recover()
将返回 nil
值。
实战案例
考虑一个读取文件的函数,该函数可能会出现以下错误:
func readFile(filename string) ([]byte, error) { data, err := os.ReadFile(filename) if err != nil { return nil, err } return data, nil }
要使用 recover()
函数捕获此错误,可以在调用函数周围添加 defer
语句:
func main() { defer func() { if err := recover(); err != nil { log.Printf("捕获到恐慌: %v", err) } }() _, err := readFile("non-existent-file.txt") if err != nil { log.Printf("读取文件出错:%v", err) } }
当程序尝试读取不存在的文件时,将发生恐慌,然后通过 defer
回调中的 recover()
函数捕获该恐慌。这允许程序记录错误并优雅地退出。
注意事项
recover()
只能捕获来自当前函数上下文的恐慌,因此如果恐慌发生在嵌套函数中,则无法捕获。recover()
函数不会取消恐慌,这意味着即使捕获到恐慌,程序也会继续崩溃。recover()
recover()
関数 🎜🎜🎜recover()
関数は、現在の関数コンテキストから最新のパニックをキャプチャする組み込み関数です。次の場合に返されます: 🎜recover()
は nil
値を返します。 🎜🎜🎜実践的なケース🎜🎜🎜次のエラーをスローする可能性のあるファイルを読み取る関数を考えてみましょう: 🎜rrreee🎜 recover()
関数を使用してこのエラーをキャッチするには、呼び出しの周りに追加することができます。 function defer
ステートメント: 🎜rrreee🎜 プログラムが存在しないファイルを読み取ろうとすると、パニックが発生し、deferrecover()
を渡します。 /code> callback > 関数はパニックをキャプチャします。これにより、プログラムはエラーをログに記録し、正常に終了できます。 🎜🎜🎜Notes🎜🎜recover()
は現在の関数コンテキストからのみパニックをキャプチャできるため、ネストされた関数でパニックが発生した場合はキャプチャできません。 🎜recover()
この関数はパニックをキャンセルしません。つまり、パニックが発生した場合でもプログラムはクラッシュし続けます。 🎜recover()
この関数は、未処理のエラーを処理するためにのみ使用する必要があり、通常のエラー処理メカニズムを置き換えるべきではありません。 🎜🎜以上がGolang の reverse() 関数を使用してパニックを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。