panic


panic
異常とは、問題が発生すべきでないところに問題が発生したことを指す.
たとえば、空のポインタを参照し、配列の下に境界を越え、除数をゼロにします.panicを使用して例外を放出すると、例外が放出されると、現在の関数の実行が直ちに停止され、deferによって実行されたすべての関数が実行され、プログラムpanicに至るまでcarshが上位層に放出されます.しかし、deferrecover関数を用いて異常阻止プログラムのクラッシュをキャプチャすることもでき、recoverdeferによってのみ意味がある.
例外の場合、適切な上流に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
    }