遅延実行延期:
文の終わりまでに必要な特定の機能を使用するときは、延期のステートメントを使用することができます
最も一般的には、ファイルを閉じていないプログラムのos.Openクローズ()の端を開いた後に追加したときに延期使用しないことです
文を延期
例:
FUNCのmain(){ fmt.Println(" 試験" ) のための I:= 0 ; iは< 3 ; I ++ { fmt.Println(I) 延期fmt.Println(I) } }
結果:
テスト
0
1
2
2
1
0
ファイル操作の例:
ファイル、ERR:= os.Open(ファイル名) IF!ERR = nilを{ 戻りERR } / * ここに戻ってバックむしろos.Openより判断で誤る書くために延期 資源が成功していない場合、リソースの解放を実行する必要はありません操作は errがnilでないとリソースの操作の実行を離すと、パニックにつながる可能 * / 延期File.close()
外側の関数が返された後に声明を延期することは関数に延期されます。
すぐに評価、そのパラメータの関数を呼び出す延期、しかし外側の関数が返すまで関数が呼び出されません。遅延された関数呼び出しは、スタック(LIFO)にプッシュされます。
関数は、外側層を返す場合、機能は、LIFOコールのために遅延される誤った結果に到達するために、戻り値を変更することができます。
パニックダウン:
手動プログラムで、ダウンタイムをトリガする必要があるときは、内蔵のパニックステートメントを使用することができます
FUNCパニック(Vのインタフェース {})
コードの残りの部分は、パニック後に実行されず、同時にコンソールにゴルーチン情報出力をスタックします
メインFUNC(){ fmt.Println(" 位置1 " ) 延期fmt.Println(" ディファー位置1 " ) fmt.Println(" 位置2 " ) パニック(" マニュアル崩壊" ) 延期fmt.Println(「ディファー位置2 " ) fmt.Println(" 位置3 " ) }
業績
パニック:手動クラッシュ
ポジション1
ポジション2
位置1を延期
ゴルーチン1 [実行]:
main.main()
D:/SoloWork/Learn/main.go:13 + 0x13a
回復回復:
プログラムはパニックの機能を回復するために使用された場合は実行し続けます
FUNC)(回復インターフェースを } {
この方法は、内部にまだプログラムがエラーを処理するために継続できるようにしながら、このような重要でないパニックの背後に顔などの例外は、エラーをスローすることができますパニックキャプチャを回復させ、パニック閉鎖機能の前に文を延期することで使用してください。
回復し、ロジックが戻って、機能はまだ延期した後に戻りますポイントパニックにならない後、それは現在の関数が中止されたと言うことですが、UPPER関数は実行し続けます。
例:
メインFUNC(){ fmt.Println(" 位置1 " ) 延期fmt.Println(" ディファー位置1 " ) fmt.Println(" 位置2 " ) ディファーFUNC(){ //は最初の延期を宣言する必要があり、または捕捉することができません異常なパニックに (fmt.Printlnを" 延期機能を入力" ) IF ERR :! =回復(); ERR = ゼロ{ fmt.Println(ERR)// ここでERRは、実際には、着信コンテンツパニックである } fmt.Printlnを(" エラー処理の延期" ) }() パニック(" クラッシュ」) //ここでダウン実行しない 延期fmt.Println(「ディファー位置2 ' ) fmt.Println(『位置3 』) }
結果:
ポジション1
ポジション2
機能へのエントリーを延期
崩壊
エラー処理を延期
位置1を延期
ContinueRun FUNC(){ 延期FUNC(){ //は、最初の延期を宣言する必要があり、またはパニック異常キャプチャすることはできません fmt.Println(" 延期入力機能" ) のIF ERR =; =)(回復:!ERRを{nilを fmt.Println (ERR)// ここでERRが実際に入ってくるコンテンツパニック } fmt.Println(" ディファーエラー処理" ) }() パニック(" クラッシュ" ) fmt.Println(" 位置4 " ) } FUNC主( ){ fmt.Println(" 位置1 " ) 延期fmt.Println("場所を遅らせる。1 " ) fmt.Println(" 位置2 " ) ContinueRun() fmt.Println(延期" ポジション2を延期' ) fmt.Println(" 位置3 " ) }
結果:
ポジション1
ポジション2
機能へのエントリーを延期
崩壊
エラー処理を延期
ポジション3
位置2を延期
位置1を延期