有時乙個函式內需要根據最後是否出錯,決定是否執行某個操作。這時候如果函式的分支又比較多,就會比較麻煩了。
defer 處理這個情況剛好合適
func main() (&err)
err = errors.new("hi,beautiful girl")
byerr(&err)
}func byerr(err *error) else
}func byerr2(err error) else
}
結果如下
2019/06/21 09:25:43 is nil
2019/06/21 09:25:43 is err
2019/06/21 09:25:43 is err
2019/06/21 09:25:43 is err
**裡兩種方法都是可行的,但需要注意的是,稍不注意 照以下方式用 就bug了:
1,如果直接用 err 作為引數,會,恒為nil2,如果用err 的指標作為引數, 會恆不為 nil
golang延遲函式defer
golang的defer優雅又簡潔,是golang的亮點之一。defer在宣告時不會立即執行,而是在函式return後,再按照先進後出的原則依次執行每個defer,一般用於釋放資源 清理資料 記錄日誌 異常處理等。下面舉個例子 package main import fmt func deferte...
golang延遲呼叫(defer)
defer特性 關鍵字 defer 用於註冊延遲呼叫。這些呼叫直到 return 前才被執。因此,可以用來做資源清理。多個defer語句,按先進後出的方式執行。defer語句中的變數,在defer宣告時就決定了。defer用途 關閉檔案控制代碼 鎖資源釋放 資料庫連線釋放 defer的觸發packa...
golang基礎 細說defer
defer 匿名函式特性 defer,匿名函式,變數傳遞,陣列array,for迴圈綜合 執行以下 並分析輸出結果 go package main import fmt func main 定義乙個變數fs,型別為乙個陣列,陣列元素的型別是匿名函式func for i 0 i 4 i i從外部傳遞進...