第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

Go 入門教程

首頁 慕課教程 Go 入門教程 Go 入門教程 23 Go 語言函數(shù)中的 defer

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

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

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

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

代碼示例

package main

import "fmt"

func main() {
    defer fmt.Println("第一個(gè)defer的語句")
    defer fmt.Println("第二個(gè)defer的語句")
    defer fmt.Println("第三個(gè)defer的語句")
    fmt.Println("Hello Codey!")
}
  • 第 6 行:第一個(gè) defer 的語句,最后一個(gè)執(zhí)行;
  • 第 7 行:第二個(gè) defer 的語句,第二個(gè)執(zhí)行;
  • 第 8 行:第一個(gè) defer 的語句,最后一個(gè)執(zhí)行。

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

圖片描述

2. defer 中的變量

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

代碼示例

package main

import "fmt"

func main() {
    a := 10
    defer fmt.Println("defer時(shí)a的值為", a)
    a = 100
    fmt.Println("print時(shí)a的值為", a)
}
  • 第 7 行:此時(shí)變量 a 的值為 10,所以 defer 輸出時(shí)a的值為10;
  • 第 8 行:此時(shí)變量 a 的值為 100,所以輸出時(shí) a 的值為100。

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

圖片描述

3. 小結(jié)

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

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