性夜影院午夜看片,无码精品久久一区二区三区,婷婷成人丁香五月综合激情,校园春色 qvod,性调教室高h学校

Go 語(yǔ)言函數(shù)中的defer

在 Go 語(yǔ)言中的?defer?關(guān)鍵字就是 Go 語(yǔ)言中延遲語(yǔ)句的標(biāo)志。Go 語(yǔ)言會(huì)在函數(shù)即將返回時(shí)逆序執(zhí)行?defer?后的語(yǔ)句。也就是說(shuō)先被?defer?的語(yǔ)句后執(zhí)行,最先執(zhí)行最后被?defer?的語(yǔ)句。defer?和有些語(yǔ)言中的 finally 語(yǔ)句塊的用法類(lèi)似,一般都用于釋放一些資源,最常用的地方就是進(jìn)程鎖的釋放。

Tips:關(guān)于 defer 的進(jìn)程鎖的釋放在 Go 語(yǔ)言的多線程中會(huì)有介紹。

 

1. defer 的逆序執(zhí)行

defer?會(huì)在函數(shù)即將結(jié)束的時(shí)候執(zhí)行,而且是按照?defer?的順序逆序執(zhí)行。

代碼示例

代碼塊
  • 1? package main
  • 2
  • 3? import "fmt"
  • 4
  • 5? func main() {
  • 6? ? ? ? ? defer fmt.Println("第一個(gè)defer的語(yǔ)句")
  • 7? ? ? ? ? defer fmt.Println("第二個(gè)defer的語(yǔ)句")
  • 8? ? ? ? ? defer fmt.Println("第三個(gè)defer的語(yǔ)句")
  • 9? ? ? ? ? fmt.Println("Hello Codey!")
  • 10? }
  • 第 6 行:第一個(gè)?defer?的語(yǔ)句,最后一個(gè)執(zhí)行;
  • 第 7 行:第二個(gè)?defer?的語(yǔ)句,第二個(gè)執(zhí)行;
  • 第 8 行:第一個(gè)?defer?的語(yǔ)句,最后一個(gè)執(zhí)行。

執(zhí)行結(jié)果

圖片描述

 

2. defer 中的變量

defer?關(guān)鍵字之后若有變量,則?defer?記錄的是在?defer?時(shí)的變量值,而不是最后函數(shù)結(jié)束時(shí)的變量值。

代碼示例

代碼塊
  • 1? package main
  • 2
  • 3? import "fmt"
  • 4
  • 5? func main() {
  • 6? ? ? ? ? a := 10
  • 7? ? ? ? ? defer fmt.Println("defer時(shí)a的值為", a)
  • 8? ? ? ? ? a = 100
  • 9? ? ? ? ? fmt.Println("print時(shí)a的值為", a)
  • 10? }
  • 第 7 行:此時(shí)變量 a 的值為 10,所以?defer?輸出時(shí)a的值為10;
  • 第 8 行:此時(shí)變量 a 的值為 100,所以輸出時(shí) a 的值為100。

執(zhí)行結(jié)果

圖片描述

 

3. 小結(jié)

本文主要介紹了 Go 語(yǔ)言中?defer?的使用,需要注意以下幾點(diǎn):

  • defer?是先聲明后執(zhí)行的語(yǔ)句模式;
  • defer?會(huì)在函數(shù)即將結(jié)束的時(shí)候統(tǒng)一執(zhí)行;
  • defer?中的變量值不會(huì)被?defer?之后的語(yǔ)句改變。

文章來(lái)源于網(wǎng)絡(luò),侵刪!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專(zhuān)業(yè)人才培訓(xùn)機(jī)構(gòu)!