言語延期を行きます

いくつかは、リソースのリリースとして使用することができます。

関数内の1延期実行順序は、最初に書き込まれ、実行される、最初のアフターライト実行(スタック構造は以下)

DeferTest1のFUNC(){
   fmt.Println( "私はdefer1だ")を延期
   fmt.Println( "私はdefer2だ")を延期
   fmt.Println( "私はDeferTest1です")
   fmt.Println( "私はDeferTest2です")
}

結果:

I DeferTest1
I DeferTest2
I defer2
I defer1 

 

値と定義間の関係の2.deferの実行は、文章文関数を延期します

DeferTest2のFUNC(){
   I:= 0
   fmt.Printf( "I =%D \トン延期"、i)を延期
   ため、私は= 10 <; I ++は{
      fmt.Printf( "I =%d個の\ tの"、私は)
   }
   fmt.Println()
}

結果

I = 0、I = 1、I = 2 i = 3、I = 4 I = 5、I = 6、I = 7、I = 8、I = 9、I = 10	
私を延期= 0	

3.defer原理

まず、次のようにreturn文との違いを見て、延期

あなたは実行が戻り値に割り当てられた結果xを返し、その後、RET命令を実行する時期を参照し、とき延期文の実行、RET命令の前にあることができます。だからここに注意を払います。値と戻りXとの関係。xが値型の場合は、コピーがあります。あなたは、次の例を見ることができます:

FUNCのdefer1()INT {
  X:= 1
  {)(FUNCを延期
   X ++ 
  }()   X返します } 

FUNC defer2()(Xは整数){
  {)(FUNCを延期
    X ++
  }()
  1を返します
} 

FUNCのdefer3()(Yはint){
  X:= 1
  {)(FUNCを延期
    X ++
  }()
  X返します
} 

FUNC defer4()(Xは整数){
  {FUNC(X INTを)延期
    X ++
    }(バツ)
    1を返します
} 

これらのメソッドは、結果を印刷している次のように、戻り値は次のとおりです。

defer1:1
defer2:2
defer3:1
defer4:1

上記の図の説明によると:

①deferを実行する前に、(値のコピーである)は、xに割り当てられた戻り値が、次にxの値を変更し、戻り値は無効であり、それは1を返し

②は、値xの名前が1のx値を延期して、xの延期値を変更し、実行する前に、この時点で、ある返し、xが、増加されるので、2のリターン

③戻り値がY、事前ディファー実行の名前で、yは値1が割り当てられ、変更を実行延期がX、Yに影響を及ぼさない、1が返され

④戻り値がXである - 名前が、パラメータxに値のコピーが渡された場合には、パラメータを有する関数funcの延期実行、である、スコープ内部ではなく、外部の衝撃xは、それは1のリターンであります

おすすめ

転載: www.cnblogs.com/dcz2015/p/11102226.html