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

全部開(kāi)發(fā)者教程

Go 入門(mén)教程

Go 語(yǔ)言基礎(chǔ)教程
01 Go語(yǔ)言簡(jiǎn)介 02 Go 在 Windows 上的安裝及配置 03 Go 在 Linux 上的安裝與配置 04 Go 在 MacOS 上的安裝及配置 05 Git 的下載和安裝 06 VSCode 編輯器安裝和配置 07 Go 的變量聲明 08 Go 的變量賦值 09 Go 語(yǔ)言的 := 10 Go 的整型(int) 11 Go 的無(wú)符號(hào)整型(uint) 12 Go 的浮點(diǎn)型(float) 13 Go 的字符類(lèi)型 14 Go 的布爾型(bool) 15 Go 的強(qiáng)制類(lèi)型轉(zhuǎn)換 16 Go 語(yǔ)言的常量 17 Go 語(yǔ)言中代替枚舉的辦法 18 Go 語(yǔ)言中的運(yùn)算符 19 Go 語(yǔ)言的分支語(yǔ)句 20 Go 語(yǔ)言的循環(huán)語(yǔ)句 21 Go 語(yǔ)言的通道 22 Go 語(yǔ)言中的函數(shù) 23 Go 語(yǔ)言函數(shù)中的 defer 24 Go 語(yǔ)言中的閉包 25 Go 語(yǔ)言的指針 26 Go 語(yǔ)言中的數(shù)組 27 Go 語(yǔ)言中的切片 28 Go 語(yǔ)言中的 Map 29 Go 語(yǔ)言中的 range 30 Go 語(yǔ)言拓展以有類(lèi)型 31 Go 語(yǔ)言中的結(jié)構(gòu)體和"面向?qū)ο?quot; 32 Go 語(yǔ)言中的接口 33 Go 語(yǔ)言類(lèi)型的內(nèi)嵌 34 Go 語(yǔ)言中的 nil 35 Go 語(yǔ)言函數(shù)式編程 36 Go 語(yǔ)言中的錯(cuò)誤和異常處理 37 Go 語(yǔ)言的并發(fā) 38 Go 語(yǔ)言中的包 39 Go 語(yǔ)言 go mod 包依賴(lài)管理工具 40 Go 語(yǔ)言的文件操作 41 Go 語(yǔ)言中的系統(tǒng)包 42 Go 語(yǔ)言的 strings 系統(tǒng)包的使用 43 Go 語(yǔ)言中的變參 44 Go 語(yǔ)言中的反射 45 Go 語(yǔ)言性能測(cè)試 46 使用 Go 語(yǔ)言搭建簡(jiǎn)易登錄功能 47 使用 gin 包優(yōu)化登錄功能
首頁(yè) 慕課教程 Go 入門(mén)教程 Go 入門(mén)教程 23 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ǔ)言的多線(xiàn)程中會(huì)有介紹。

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

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

代碼示例

package main

import "fmt"

func main() {
    defer fmt.Println("第一個(gè)defer的語(yǔ)句")
    defer fmt.Println("第二個(gè)defer的語(yǔ)句")
    defer fmt.Println("第三個(gè)defer的語(yǔ)句")
    fmt.Println("Hello Codey!")
}
  • 第 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í)的變量值。

代碼示例

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 語(yǔ)言中 defer 的使用,需要注意以下幾點(diǎn):

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