golang 用defer 捕獲error 需小心

2022-03-14 07:42:44 字數 582 閱讀 7862

有時乙個函式內需要根據最後是否出錯,決定是否執行某個操作。這時候如果函式的分支又比較多,就會比較麻煩了。

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 作為引數,會,恒為nil

2,如果用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從外部傳遞進...