defer詳解 結合例項

2021-10-05 21:51:38 字數 2135 閱讀 7238

package main

import (

"fmt"

)func main()

func foo() int

這段**執行後會列印出

in foo: 1000

in defer : 0

in main func: 1024

package main

import (

"fmt"

)func main()

func foo() int ()

i = 1000

fmt.println("in foo:", i)

return i + 24

}

這段**執行後會列印出

in foo: 1000

in defer : 1000

in main func: 1024

package main

import (

"fmt"

)func main()

func foo() ()

i++fmt.println("+1後的i:", i)

defer func() ()

i++fmt.println("再+1後的i:", i)

defer func() ()

i++fmt.println("再+1後的i:", i)

}

+1後的i: 1

再+1後的i: 2

再+1後的i: 3

第三個defer 2

第二個defer 1

第乙個defer 0

func foo() (i)

i++fmt.println("+1後的i:", i)

defer func(k int) (i)

i++fmt.println("再+1後的i:", i)

defer func(k int) (i)

i++fmt.println("再+1後的i:", i)

}

+1後的i: 2

再+1後的i: 3

再+1後的i: 4

第三個defer 3

第二個defer 2

第乙個defer 1

func foo() (&i)

i++fmt.println("+1後的i:", i)

defer func(k *int) (&i)

i++fmt.println("再+1後的i:", i)

defer func(k *int) (&i)

i++fmt.println("再+1後的i:", i)

}

+1後的i: 1

再+1後的i: 2

再+1後的i: 3

第三個defer 3

第二個defer 3

第乙個defer 3

func main() 

func foo1() int ()

return i

}func foo2() map[string]string

defer func() ()

return m

}

foo1 return : 0

foot return : map[a:b]

func foo1() (i int) ()

return i

}執行結果:

foo1 return : 1

示例

func panicfunc() ()

fmt.println("before panic")

panic(0)

fmt.println("after panic")

}

before panic

before recover

after recover

Go 延遲函式 defer 詳解

go 語言中延遲函式 defer 充當著 try.catch 的重任,使用起來也非常簡便,然而在實際應用中,很多 gopher 並沒有真正搞明白 defer return 返回值 panic 之間的執行順序,從而掉進坑中,今天我們就來揭開它的神秘面紗!先來執行下面兩段 package main im...

約瑟夫問題結合詳解

前端時間之前 大概有兩周了吧 我們進行了第一次acm賽制的模擬比賽 雖然最後總分爆零了但還是學到了很多東西滴 t1的題目為約瑟夫問題 我當時一看這個問題就感到十分狂喜,這t1果然是最簡單的肯定能切了呀!然而我還是沒有體會到社會的陰暗 題面要求是n個人數到m槍斃,然後要輸出最後的倖存者編號 資料範圍 ...

PHP 結合例項認識 Socket

本部分參考自 揭開socket的神秘面紗 原始碼工作室 請結合下圖 socket 抽象層的位置來理解。socket 是應用層和 tcp ip 協議族進行通訊的中間軟體抽象層,是一組介面。在設計模式中,就是乙個門面模式,它把複雜的實現封裝在介面後面,而只提供了一組簡單的介面給使用者呼叫。在普遍的程式語...