defer語句在不對的位置出現 , 會出現錯誤
file, err := os.open("/null")
defer file.close()
if err != nil
res, err := http.get("") // 不翻牆的情況下。是無法訪問滴
defer res.body.close()
if err != nil
這倆個**就是會報錯
因為把defer放在err判斷前面了,當出現錯誤err判斷直接return時,會去呼叫defer
這個時候file和res都是空指標,呼叫會報錯
defer與閉包函式在一塊時要注意
var nums [5]int
for i := range nums ()
}
閉包函式裡面的i是使用的最後一次迴圈的值,因此會列印5個5
還要注意defer的呼叫順序是先進後出,以及defer後面的語句在執行的時候,函式呼叫的引數會被儲存起來,但是不執行。也就是複製了乙份。
但是當使用了結構體指標呼叫的時候,沒有把它當引數看待
Go Go中延遲語句defer的注意事項
defer語句在不對的位置出現 會出現錯誤 不fq的情況下。是無法訪問滴 defer res.body.close if err nil 這倆個 就是會報錯 因為把defer放在err判斷前面了,當出現錯誤err判斷直接return時,會去呼叫defer 這個時候file和res都是空指標,呼叫會報...
Go中的延遲處理 defer
defer 語句 該語句表示預定對乙個函式進行呼叫,呼叫的函式被稱為延遲函式 eg defer fmt.println thye finishing touches.defer fmt.println 11 該語句在函式結束時被呼叫,其執行順序和書寫順序相反,即先列印 11,再列印 the fini...
9 7Go之函式之defer 延遲執行語句
作用場景 defer的用法類似於j a裡面的finally語句塊 try.catch.finally 示例 package main import fmt func main 注意 處理開 關檔案,接收 回覆請求,加鎖 解鎖等操作容易忽略資源的釋放 defer 語句是在函式退出時執行的語句,使用 d...