欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go?defer延遲調用的使用場景示例詳解

 更新時間:2023年05月30日 08:36:11   作者:Architecture  
這篇文章主要為大家介紹了go?defer延遲調用的使用場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

defer 簡介

defer 通俗來講就是延遲調用。defer 會在當前函數(shù)返回之前執(zhí)行 defer 注冊的函數(shù)。

例如: defer func_x() 這樣語句會讓你注冊一個函數(shù)變量到 defer 的全局鏈表中,在 defer 語句所在的函數(shù)退出之前調用。

主要使用場景

panic 場景:這個是重要的一個特性,通常能簡化我們的代碼,確保無論任何場景,defer 的函數(shù)一定調用,通常用在鎖或者資源的釋放場景較多;

配套的兩個行為代碼可以放在最近的位置:創(chuàng)建&釋放、加鎖&放鎖、前置&后置,使得代碼更易讀,編程體驗優(yōu)秀。最近的地方是哪里?下一行

延遲調用

package main
func main() {
    defer println("--- defer ---")
    println("--- end ---")
}

defer 會在main函數(shù)之前調用。

核心要點:

延遲調用:defer 語句本身雖然是 main 的第一行,但是 fmt.Println 是先打印的;

defer 關鍵字一定是處于函數(shù)上下文:defer 必須放在函數(shù)內部

LIFO

一個函數(shù)內有多個defer時,壓棧式執(zhí)行,后入先出。

package main
import "fmt"
func main() {
    defer func() {
        fmt.Println("1")
    }()
    defer func() {
        fmt.Println("2")
    }()
}

異常場景

注意:一定要先注冊defer,放在函數(shù)第一行,放到如下代碼return之前,是無法捕獲異常的;

package main
import "fmt"
func main() {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("捕獲panic", err)
        }
    }()
    var sliceOne []int
    sliceOne[0] = 1
    return
}

以上就是go defer 延遲調用的詳細內容,更多關于go defer 延遲調用的資料請關注腳本之家其它相關文章!

相關文章

  • Go Map并發(fā)沖突預防與解決

    Go Map并發(fā)沖突預防與解決

    這篇文章主要為大家介紹了Go Map并發(fā)沖突預防與解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 使用golang實現(xiàn)一個MapReduce的示例代碼

    使用golang實現(xiàn)一個MapReduce的示例代碼

    這篇文章主要給大家介紹了關于如何使用golang實現(xiàn)一個MapReduce,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09
  • Go語言的io輸入輸出流方式

    Go語言的io輸入輸出流方式

    Go語言中,輸入輸出流的處理通過io庫中的Reader和Writer接口來實現(xiàn),Reader接口定義了Read方法,用于從流中讀取數(shù)據(jù)到程序中,Writer接口定義了Write方法,用于將數(shù)據(jù)寫入到底層的數(shù)據(jù)流中,這些接口被許多標準庫的類型所實現(xiàn)
    2024-10-10
  • 淺談go中切片比數(shù)組好用在哪

    淺談go中切片比數(shù)組好用在哪

    數(shù)組和切片都是常見的數(shù)據(jù)結構,本文將介紹Go語言中數(shù)組和切片的基本概念,同時詳細探討切片的優(yōu)勢,感興趣的可以了解下
    2023-06-06
  • Go檢查結構體中是否存在某個字段及創(chuàng)建結構體切片或映射

    Go檢查結構體中是否存在某個字段及創(chuàng)建結構體切片或映射

    這篇文章主要為大家介紹了Go檢查結構體中是否存在某個字段及創(chuàng)建結構體切片或映射實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Go語言LeetCode題解682棒球比賽

    Go語言LeetCode題解682棒球比賽

    這篇文章主要為大家介紹了Go語言LeetCode題解682棒球比賽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • gin自定義中間件解決requestBody不可重讀(請求體取值)

    gin自定義中間件解決requestBody不可重讀(請求體取值)

    這篇文章主要介紹了gin自定義中間件解決requestBody不可重讀,確保控制器能夠獲取請求體值,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Go語言中的Struct結構體

    Go語言中的Struct結構體

    這篇文章介紹了Go語言中的Struct結構體,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 詳解Golang利用反射reflect動態(tài)調用方法

    詳解Golang利用反射reflect動態(tài)調用方法

    這篇文章主要介紹了詳解Golang利用反射reflect動態(tài)調用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • Go語言tunny的workerWrapper使用教程示例

    Go語言tunny的workerWrapper使用教程示例

    這篇文章主要為大家介紹了Go語言tunny的workerWrapper使用教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07

最新評論