主頁 > 知識(shí)庫 > 聊聊golang的defer的使用

聊聊golang的defer的使用

熱門標(biāo)簽:赤峰電銷 400開頭電話怎樣申請(qǐng) 杭州人工智能電銷機(jī)器人費(fèi)用 谷歌美發(fā)店地圖標(biāo)注 官渡電銷外呼管理系統(tǒng)怎么收費(fèi) 利用地圖標(biāo)注位置 地圖區(qū)域圖標(biāo)注后導(dǎo)出 江蘇呼叫中心外呼系統(tǒng)有效果嗎 貴州電話智能外呼系統(tǒng)


本文主要研究一下golang的defer

defer

  • return先賦值(對(duì)于命名返回值),然后執(zhí)行defer,最后函數(shù)返回
  • defer函數(shù)調(diào)用的執(zhí)行順序與它們分別所屬的defer語句的執(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)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Golang之defer 延遲調(diào)用操作
  • Golang學(xué)習(xí)筆記之延遲函數(shù)(defer)的使用小結(jié)
  • golang中defer的關(guān)鍵特性示例詳解
  • golang中defer的使用規(guī)則詳解
  • Golang巧用defer進(jìn)行錯(cuò)誤處理的方法
  • Golang 的defer執(zhí)行規(guī)則說明

標(biāo)簽:河池 鷹潭 保定 武漢 宜春 黔西 松原 泰安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《聊聊golang的defer的使用》,本文關(guān)鍵詞  聊聊,golang,的,defer,使用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《聊聊golang的defer的使用》相關(guān)的同類信息!
  • 本頁收集關(guān)于聊聊golang的defer的使用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章