go語言的defer用法

2021-10-17 14:22:59 字數 2034 閱讀 6272

defer的詞義:「延遲」,「推遲」

在go語言中,defer關鍵字來延遲乙個函式或者方法的執行

1.defer函式或方法:乙個函式或方法的執行被延遲了

2.defer的用法:

a:物件.close(),臨時檔案的刪除。。。

檔案.open()

defer close()

讀或寫b:go語言中關於異常的處理,使用panic()和recover()

panic函式用於引發恐慌,導致程式中斷執行

recover函式用於恢復程式的執行,recover()語法要求必須在defer中執行

3.如果多個defer函式:

棧規則,先延遲後執行,後延遲先執行

4.defer函式傳遞引數的時候:

defer函式呼叫時,就已經傳遞了引數資料了,只是暫時不執行函式中的**而已

5.defer函式注意點:

當外圍函式的語句正常執行完畢時,只有其中所有的延遲函式都執行完畢,外圍函式才會真正的結束執行。

當執行外圍函式中的return語句時,只有其中所有的延遲函式都執行完畢後,外圍函式才會真正返回

當外圍函式中的**引發執行恐慌時,只有其中所有的延遲含稅都執行完畢後,該執行時恐慌才會真正被擴充套件至呼叫函式

package main

import

"fmt"

func

main()

func

fun1

(s string

)func

fun2

(a int

)func

fun3()

int

輸出:

hello

123456

----

----

----

----

----

----

-----2

main中列印的a=3==

====

====

====

====

====

====

====

====

fun3

()函式的執行。。。

hahaha

0fun2

()函式列印的a=

2world

defer與return的注意點:

(1):無參返回值

package main

import

("fmt"

)funca(

)int()

defer

func()

()return i

}func

main()

輸出:

defer1:

1defer2:

2return

:0

解釋:

返回值由變數i賦值,相當於返回值為i=0。第二個defer中i++ = 1, 第乙個defer中i++ = 2,所以最終i的值是2。但是返回值已經被賦值了,就算後續修改i也不會影響返回值。最終返回值返回0,所以main中列印0。

(2)有參返回值

package main

import

("fmt"

)funcb(

)(i int)(

)defer

func()

()return i //或者直接寫成return

}func

main()

輸出:

defer1:

1defer2:

2return

:2

解釋:

這裡已經指定了返回值就是i,所以對i進行修改都相當於在修改返回值,所以最終函式的返回值是2。

GO語言延遲函式defer用法分析

defer 在宣告時不會立即執行,而是在函式 return 後,再按照 filo 先進後出 的原則依次執行每乙個 defer,一般用於異常處理 釋放資源 清理資料 記錄日誌等。這有點像物件導向語言的析構函式,優雅又簡潔,是 golang 的亮點之一。1 了解 defer 的執行順序 package ...

go語言defer關鍵字的用法

在 go 中,defer語句會推遲函式 包括任何引數 的執行,直到包含defer語句的函式完成。通常情況下,當你想要避免忘記任務 例如關閉檔案或執行清理程序 時,可以推遲某個函式的執行。可以根據需要推遲任意多個函式。defer 語句按逆序執行,先執行最後乙個,最後執行第乙個。通過執行以下示例 來檢視...

go語言 defer 高階

go語言defer語句的用法 defer後面必須是函式呼叫語句,不能是其他語句,否則編譯器會出錯。package main import log func foo n int int func main 這個例子中defer後面使用的是n 指令,不是乙個函式呼叫語句,編譯器就報錯 command l...