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

聊聊golang的defer的使用

 更新時間:2020年12月02日 10:24:16   作者:codecraft  
這篇文章主要介紹了聊聊golang的defer的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧


本文主要研究一下golang的defer

defer

  • return先賦值(對于命名返回值),然后執(zhí)行defer,最后函數(shù)返回
  • defer函數(shù)調(diào)用的執(zhí)行順序與它們分別所屬的defer語句的執(zhí)行順序相反
  • defer后面的表達(dá)式可以是func或者是method的調(diào)用,如果defer的函數(shù)為nil,則會panic

實例

實例1

// f returns 42
func f() (result int) {
  defer func() {
    // result is accessed after it was set to 6 by the return statement
    result *= 7
  }()
  return 6
}

這里return先給result賦值為6,之后執(zhí)行defer,result變?yōu)?2,最后返回42

實例2

func f() int {
  result := 6
  defer func() {
    // result is accessed after it was set to 6 by the return statement
    result *= 7
  }()
  return result
}

這里return確定返回值6,之后defer修改result,最后函數(shù)返回return確定的返回值

實例3

func multiDefer() {
  for i := 3; i > 0; i-- {
    defer func(n int) {
      fmt.Print(n, " ")
    }(i)
  }

  for i := 3; i > 0; i-- {
    defer fmt.Print(i, " ")
  }
}

多個defer函數(shù),按順序逆序執(zhí)行,這里輸出1 2 3

實例4

var fc func() string

func main() {
  fmt.Println("hello")
  defer fc()
}

由于defer指定的func為nil,這里panic

實例5

func main() {
  for i := 3; i > 0; i-- {
    defer func() {
      fmt.Print(i, " ")
    }()
  }
}

由于defer這里調(diào)用的func沒有參數(shù),等執(zhí)行的時候,i已經(jīng)為0,因而這里輸出3個0

小結(jié)

defer可以拆解為return賦值,defer執(zhí)行,最后代碼返回三步;defer的順序按逆序執(zhí)行。

doc

Defer_statements
Golang之Defer
golang中defer執(zhí)行時機與常見問題

到此這篇關(guān)于聊聊golang的defer的使用的文章就介紹到這了,更多相關(guān)golang defer內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析Go語言中的方法集合與選擇receiver類型

    淺析Go語言中的方法集合與選擇receiver類型

    這篇文章主要為大家詳細(xì)介紹了Go語言中的方法集合與選擇receiver類型的相關(guān)知識,文中的示例代碼講解詳細(xì),對我們深入學(xué)習(xí)go語言有一定的幫助,需要的可以參考下
    2023-11-11
  • golang flag包的使用教程

    golang flag包的使用教程

    golang 的 flag 包是用于處理命令行參數(shù)的工具包,我們可以基于這個包來開發(fā)自定義的命令行工具,下面小編就來為大家介紹一下flag包的具體使用吧
    2023-09-09
  • Golang中這些channel用法你了解嗎

    Golang中這些channel用法你了解嗎

    channel?是GO語言中一種特殊的類型,是連接并發(fā)goroutine的管道,這篇文章主要來和大家分享一下關(guān)于?nil?channel?通道,有緩沖通道,無緩沖通道的常用方法以及巧妙使用的方式,希望對大家有所幫助
    2023-08-08
  • 深入理解Go語言中的數(shù)組和切片

    深入理解Go語言中的數(shù)組和切片

    Go語言中的數(shù)組大概相當(dāng)與C/C++中的數(shù)組,固定大小,不能夠動態(tài)擴展大小,而切片大概相當(dāng)與C++中的Vector,可以動態(tài)擴展大小,當(dāng)大小超過容量時,重新分配一塊內(nèi)存,然后將數(shù)據(jù)復(fù)制到新的內(nèi)存區(qū)域。下面我們通過幾個問題來更好理解golang 的數(shù)組和切片,一起來看看吧。
    2016-09-09
  • Golang RSA生成密鑰、加密、解密、簽名與驗簽的實現(xiàn)

    Golang RSA生成密鑰、加密、解密、簽名與驗簽的實現(xiàn)

    RSA 是最常用的非對稱加密算法,本文主要介紹了Golang RSA生成密鑰、加密、解密、簽名與驗簽的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • golang并發(fā)編程的實現(xiàn)

    golang并發(fā)編程的實現(xiàn)

    這篇文章主要介紹了golang并發(fā)編程的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • golang中net的tcp服務(wù)使用

    golang中net的tcp服務(wù)使用

    這篇文章主要介紹了golang中net的tcp服務(wù)使用,文章通過服務(wù)端監(jiān)聽端口 展開主題的詳細(xì)內(nèi)容,具有一定的參考價值,需要的 小伙伴可以參考一下
    2022-04-04
  • 最新評論