久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

Go 語言函數中的defer

在 Go 語言中的?defer?關鍵字就是 Go 語言中延遲語句的標志。Go 語言會在函數即將返回時逆序執行?defer?后的語句。也就是說先被?defer?的語句后執行,最先執行最后被?defer?的語句。defer?和有些語言中的 finally 語句塊的用法類似,一般都用于釋放一些資源,最常用的地方就是進程鎖的釋放。

Tips:關于 defer 的進程鎖的釋放在 Go 語言的多線程中會有介紹。

 

1. defer 的逆序執行

defer?會在函數即將結束的時候執行,而且是按照?defer?的順序逆序執行。

代碼示例

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

執行結果

圖片描述

 

2. defer 中的變量

defer?關鍵字之后若有變量,則?defer?記錄的是在?defer?時的變量值,而不是最后函數結束時的變量值。

代碼示例

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

執行結果

圖片描述

 

3. 小結

本文主要介紹了 Go 語言中?defer?的使用,需要注意以下幾點:

  • defer?是先聲明后執行的語句模式;
  • defer?會在函數即將結束的時候統一執行;
  • defer?中的變量值不會被?defer?之后的語句改變。

文章來源于網絡,侵刪!

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 吐鲁番市| 高青县| 惠州市| 辽中县| 沙坪坝区| 长沙市| 都兰县| 凌海市| 三江| 贞丰县| 临颍县| 乌审旗| 丹凤县| 北宁市| 江口县| 昌图县| 永兴县| 开封县| 轮台县| 灌云县| 武功县| 青冈县| 余江县| 滁州市| 定南县| 西林县| 滕州市| 定襄县| 康乐县| 资阳市| 荥阳市| 鄂伦春自治旗| 衡阳市| 盐山县| 隆昌县| 稷山县| 隆回县| 奉节县| 射洪县| 那曲县| 西安市|