開発者や学生のために設計チェーンオフ、インサイダー!
この記事ブロック鎖技術コミュニティは、許可なく複製拒否しました。
この記事で論じては、延期コミュニティのより多くの助けのメンバーを持っていると思ってい呼び出す遅らせるためにプログラミングを行っています。
1つの延期アクション
現在作成中の関数、または無名関数の実行方法を遅らせるために、キーワード延期を使用してください。唯一の関数やメソッド内に表示することができ文を延期します。
FUNCのメイン(){
fmt.Println("this is a test")
defer fmt.Println("this is a defer") //main结束前调用
/*
結果:
this is a test
this is a defer
*/
}
文が延期機構を介してのペアを動作させるために処理されて延期にかかわらず、論理関数の複雑さの、いずれかの実行パスで、リソースが解放されていることを確認することができます。リソースの解放を要求されたリソース文の真後ろにする必要があります。
と併せて2つの延期と無名関数
FUNCのメイン(){
a, b := 10, 20
defer func(x int) { // a以值传递方式传给x
fmt.Println("defer:", x, b) // b 闭包引用
}(a)
a += 10
b += 100
fmt.Printf("a = %d, b = %d\n", a, b)
/*
結果:
a = 20, b = 120
defer: 10 120
*/
}
3の複数の実行順序を延期
延期文で複数の機能がある場合、それらは注文LIFOで実行されるの(最初のうち、の最後)。でも遅延関数呼び出しやエラーが発生し、これらの呼び出しは、まだYESになります。
FUNC試験(Xはint){
fmt.Println(100 / x)//x为0时,产生异常
}
FUNCのメイン(){
defer fmt.Println("aaaaaaaa")
defer fmt.Println("bbbbbbbb")
defer test(0)
defer fmt.Println("cccccccc")
/*
結果:
cccccccc
bbbbbbbb
aaaaaaaa
panic: runtime error: integer divide by zero
*/
}