## Panic アクセス範囲外、ヌルポインターリファレンスなど。これらのランタイムエラーはパニックの例外を引き起こします。 golang には try...catch... などの例外キャプチャ ステートメントはありませんが、例外をスローしたり例外をキャッチしたりするためのパニックおよびリカバリ組み込み関数が提供されています。
• パニックとリカバリのパラメータのタイプはインターフェイス{}であるため、任意のタイプのオブジェクトをスローできます。• プログラム内で致命的なエラーが発生し、プログラム全体が続行できなくなった場合、golang にはプログラムを終了するパニック機能が用意されています。
• プログラムがパニックになった場合は、recover を使用してプログラムの制御を取り戻します。 • すべてのパニック例外がランタイムから発生するわけではありません。組み込みパニック関数を直接呼び出すと、パニック例外も発生します。• パニック関数は、パラメータとして任意の値を受け入れます。(1) パニックの使用
① 遅延デバッグ中に発生したエラーは、後続の遅延デバッグでキャプチャできますが、キャプチャできるのは最後のエラーのみです。func test() {defer func() { fmt.Println(recover()) }()defer func() { panic("defer panic") }() panic("test panic") }func main() { test() //defer panic}
デモ
package mainimport ( "fmt")func fullName(firstName *string, lastName *string) { if firstName == nil { panic("Firsr Name can't be null") } if lastName == nil { panic("Last Name can't be null") } fmt.Printf("%s %s\n", *firstName, *lastName) fmt.Println("returned normally from fullName") }func test(){ defer fmt.Println("deferred call in test") firName := "paul" fullName(&firName, nil) }func main() { defer fmt.Println("deferred call in main") test() fmt.Println("returned normally from main") }
以上がgolang パニックは標準エラーをキャプチャできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。