GO語言獨有的refer,後面可以跟一個簡單語句或者跟一個匿名函數。refer必須處於一個方法或者函數中。
1. 簡單理解:refer一定會在一個函數和方法全部執行完之後纔會執行。可以理解成析構函數。
2.refer中的語句,在編譯過程中就會生成語句,並將語句插入一個棧結構的隊列中,遵循先入後出的原則。因此,如果defer運用在循環中,一定要注意這一點。
3.- 如果採用匿名函數形式,可以忽略返回定義,因爲defer不會處理返回值。如果傳入參數,defer中內容實際是在編譯期間就將參數替換爲對應的值,並插入到隊列中,如下例,實際插入隊列的代碼爲:
fmt.Println(3)
fmt.Println(2)
fmt.Println(1)
fmt.Println(0)