ホームページ > バックエンド開発 > Golang > golang パニックは標準エラーをキャプチャできますか?

golang パニックは標準エラーをキャプチャできますか?

(*-*)浩
リリース: 2019-12-17 10:17:56
オリジナル
2700 人が閲覧しました

golang パニックは標準エラーをキャプチャできますか?

## 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}
ログイン後にコピー
②関数がパニックになると実行が終了し、すべての遅延関数が実行された後、プログラム制御は関数の呼び出し元に戻ります。このプロセスは、現在のコルーチンのすべての関数が戻って終了するまで継続され、その後、プログラムはパニック情報を出力し、次にスタック トレースを出力し、最後にプログラムは終了します。

関数がパニックにならない場合、recover 関数を呼び出しても情報は取得されず、現在のプロセスには影響しません。

デモ

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート