亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

聊聊golang的defer的使用

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


本文主要研究一下golang的defer

defer

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

實(shí)例

實(shí)例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

實(shí)例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確定的返回值

實(shí)例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, " ")
  }
}

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

實(shí)例4

var fc func() string

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

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

實(shí)例5

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

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

小結(jié)

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

doc

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

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

相關(guān)文章

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

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

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

    golang flag包的使用教程

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

    Golang中這些channel用法你了解嗎

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

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

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

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

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

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

    這篇文章主要介紹了golang并發(fā)編程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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)容,具有一定的參考價(jià)值,需要的 小伙伴可以參考一下
    2022-04-04
  • 最新評(píng)論