最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang中defer執(zhí)行時機的案例分析

 更新時間:2023年11月10日 09:49:26   作者:追逐夢想之路_隨筆  
這篇文章主要來通過一些案例和大家一起探討一下golang中defer的執(zhí)行時機,文中的示例代碼講解詳細,對我們深入了解golang有一定的幫助,感興趣的可以跟隨小編一起學習一下

示例代碼

package main
import "fmt"

func calcFunc(x int, y int) int {
	return x + y
}

func main() {
	// defer語句的執(zhí)行順序是,從右到左,逆序執(zhí)行
	deferDemo()

	// deferDemo1函數
	demo1 := deferDemo1()
	fmt.Println(demo1) // 0

	// deferDemo2函數
	demo2 := deferDemo2()
	fmt.Println(demo2) // 1

	// deferDemo4
	demo4 := deferDemo4()
	fmt.Println(demo4) // 1

	// deferDemo5
	demo5 := deferDemo5()
	fmt.Println(demo5) // 1

	// deferDemo6
	demo6 := deferDemo6()
	fmt.Println(demo6) // 2

	// 難點解析
	/*
		   分析:
			defer注冊順序:
			1.defer fmt.Println("AA", calcFunc(x, calcFunc(x, y)))
			2.defer fmt.Println("BB", calcFunc(x, calcFunc(x, y)))
			defer執(zhí)行順序:
			1. fmt.Println("BB", calcFunc(x, calcFunc(x, y)))
			2. fmt.Println("AA", calcFunc(x, calcFunc(x, y)))

	*/
	x := 1
	y := 2
	// 注冊的時候 x = 1, y = 2 所以執(zhí)行的時候x = 1, y = 2
	defer fmt.Println("AA", calcFunc(x, calcFunc(x, y))) // calcFunc(1,1+2)  // 結果是:4
	x = 10
	// 注冊的時候x = 10, y = 2 所以執(zhí)行的時候x = 10, y = 2
	defer fmt.Println("BB", calcFunc(x, calcFunc(x, y))) // calcFunc(10,10+2) // 結果是:22
	y = 20

}

分析:

defer語句的執(zhí)行順序是,從右到左,逆序執(zhí)行

執(zhí)行deferDemo()函數時,會先執(zhí)行defer語句,再執(zhí)行函數體,函數體執(zhí)行完后,再執(zhí)行defer語句

執(zhí)行結果:

開啟defer
結束defer
defer語句6
defer語句5
defer語句4
defer語句3
defer語句2
defer語句1

demo:

func deferDemo() {
	fmt.Println("開啟defer")
	defer func() {
		fmt.Println("defer語句1")
	}()
	defer func() {
		fmt.Println("defer語句2")
	}()
	defer func() {
		fmt.Println("defer語句3")
	}()

	defer fmt.Println("defer語句4")
	defer fmt.Println("defer語句5")
	defer fmt.Println("defer語句6")

	fmt.Println("結束defer")
}

deferDemo1執(zhí)行結果是 0,延遲執(zhí)行

func deferDemo1() int {
	var a int

	defer func() {
		a++
	}()

	return a
}

deferDemo2執(zhí)行結果是1:原因返回匿名返回值a等待函數體內操作完成才會執(zhí)行return

func deferDemo2() (a int) {
	// 步驟一先賦值
	//a = 0

	// 步驟二再執(zhí)行defer語句
	defer func() {
		a++
	}()

	// 步驟三再執(zhí)行函數體
	// 返回值a等待函數體內操作完成才會執(zhí)行return
	return a
}

deferDemo3執(zhí)行結果是1: 原因返回匿名返回值a等待函數體內操作完成才會執(zhí)行return

func deferDemo3() (a int) {
	defer func() {
		a++
	}()

	return a
}

deferDemo4

func deferDemo4() int {
	x := 1

	defer func(x int) {
		x++ // 內部x和外面x不是同一個變量
	}(x)

	return x // 1
}

deferDemo5

func deferDemo5() (x int) {
	x = 1

	defer func(x int) {
		x++ // 內部x和外面x不是同一個變量
	}(x)

	return x // 1
}

deferDemo6

func deferDemo6() (x int) {
	x = 1

	defer func() {
		x++
	}()

	return x // 2
}

到此這篇關于golang中defer執(zhí)行時機的案例分析的文章就介紹到這了,更多相關go defer內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • golang time包的用法詳解

    golang time包的用法詳解

    這篇文章主要介紹了golang time包的用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • 通過示例深度理解Go channel range

    通過示例深度理解Go channel range

    這篇文章主要為大家介紹了Go channel range使用示例深度理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • go micro集成鏈路跟蹤的方法和中間件原理解析

    go micro集成鏈路跟蹤的方法和中間件原理解析

    這篇文章主要介紹了go-micro集成鏈路跟蹤的方法和中間件原理,關于Http或者說是Restful服務的鏈路跟蹤,go-micro的httpClient支持CallWrapper,可以用WrapCall來添加鏈路跟蹤的CallWrapper,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2022-05-05
  • GO語言包管理工具go?mod以及包詳解

    GO語言包管理工具go?mod以及包詳解

    go mod是go的一個模塊管理工具,用來代替?zhèn)鹘y(tǒng)的GOPATH方案,下面這篇文章主要給大家介紹了關于GO語言包管理工具go?mod以及包詳解的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • GO的基礎知識掃盲注意事項

    GO的基礎知識掃盲注意事項

    這篇文章主要介紹了GO的基礎知識注意事項,本文是GO語言小白的掃盲文,主要講解了go語言的基本知識,GO程序目錄結構,GO程序包的導入與別名運用,GO內置關鍵字,GO注釋方法需要的朋友可以參考下
    2022-12-12
  • Golang實現檢測SSL證書有效期

    Golang實現檢測SSL證書有效期

    本文主要為大家詳細介紹如何使用Go語言中的crypto/tls模塊來獲取網站的SSL/TLS證書信息并檢查其有效期,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2026-04-04
  • Golang并發(fā)繞不開的重要組件之Channel詳解

    Golang并發(fā)繞不開的重要組件之Channel詳解

    Channel是一個提供可接收和發(fā)送特定類型值的用于并發(fā)函數通信的數據類型,也是Golang并發(fā)繞不開的重要組件之一,本文就來和大家深入聊聊Channel的相關知識吧
    2023-06-06
  • golang中for循環(huán)遍歷channel時需要注意的問題詳解

    golang中for循環(huán)遍歷channel時需要注意的問題詳解

    這篇文章主要給大家介紹了關于golang中for循環(huán)遍歷channel時需要注意的問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-04-04
  • Go語言實現猜數字小游戲

    Go語言實現猜數字小游戲

    這篇文章主要為大家詳細介紹了Go語言實現猜數字小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • golang調用c實現的dll接口細節(jié)分享

    golang調用c實現的dll接口細節(jié)分享

    這篇文章主要介紹了golang調用c實現的dll接口細節(jié)分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05

最新評論

巫山县| 阿荣旗| 弥渡县| 那曲县| 沛县| 凭祥市| 行唐县| 临颍县| 鹿泉市| 宁明县| 彭州市| 横山县| 富宁县| 天柱县| 姜堰市| 崇州市| 布尔津县| 济南市| 小金县| 措美县| 乐亭县| 顺义区| 宜都市| 北宁市| 资中县| 双辽市| 米脂县| 怀柔区| 沙湾县| 天祝| 东乌| 宝坻区| 斗六市| 建平县| 大石桥市| 青田县| 兰西县| 朝阳县| 阿尔山市| 炉霍县| 遂川县|