panic
1366 ワード
panic
異常とは、問題が発生すべきでないところに問題が発生したことを指す.
たとえば、空のポインタを参照し、配列の下に境界を越え、除数をゼロにします.
例外の場合、適切な上流に
例外処理
1.プログラム開発段階:スピードミスを堅持し、それを停止させる
2.プログラム配置段階:
レスポンス例外スタックの例外呼び出し情報と重要なビジネス情報を印刷し、これらの問題が表示されるようにします. 異常をエラーに変換し、呼び出し元がプログラムを健康状態に回復させ、安全な実行を継続する.
異常とは、問題が発生すべきでないところに問題が発生したことを指す.
たとえば、空のポインタを参照し、配列の下に境界を越え、除数をゼロにします.
panic
を使用して例外を放出すると、例外が放出されると、現在の関数の実行が直ちに停止され、defer
によって実行されたすべての関数が実行され、プログラムpanic
に至るまでcarsh
が上位層に放出されます.しかし、defer
のrecover
関数を用いて異常阻止プログラムのクラッシュをキャプチャすることもでき、recover
はdefer
によってのみ意味がある.例外の場合、適切な上流に
recover
を選択し、スタック情報を印刷して、導入後のプログラムが終了しないようにすることができます.例外処理
1.プログラム開発段階:スピードミスを堅持し、それを停止させる
2.プログラム配置段階:
Goroutine
panic
が存在し、recover
が存在しない場合、Golang
プロセス全体が異常に終了する.したがって、Golang
プログラムが配備されると、いずれの場合に発生する異常もプログラム異常の終了を招くべきではありません.この目的を達成するために、上位関数に遅延実行のrecover
呼び出しを追加し、recover
を行うかどうかは環境変数またはプロファイルに基づいて決定する必要があります.デフォルトではrecover
が必要です.レスポンス例外
func main() {
fmt.Println("start")
startProcess()
fmt.Println("done")
}
func startProcess() {
defer func() {
if info:= recover(); info != nil {
// panic
fmt.Println(info)
//
debug.PrintStack()
}
}()
fmt.Println(process())
}
func process() (result bool) {
// , panic
a := []int{1,2,3}
// panic
a[6] = 4
return
}