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

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

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

示例代碼

package main
import "fmt"

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

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

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

	// deferDemo2函數(shù)
	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

	// 難點(diǎn)解析
	/*
		   分析:
			defer注冊(cè)順序:
			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
	// 注冊(cè)的時(shí)候 x = 1, y = 2 所以執(zhí)行的時(shí)候x = 1, y = 2
	defer fmt.Println("AA", calcFunc(x, calcFunc(x, y))) // calcFunc(1,1+2)  // 結(jié)果是:4
	x = 10
	// 注冊(cè)的時(shí)候x = 10, y = 2 所以執(zhí)行的時(shí)候x = 10, y = 2
	defer fmt.Println("BB", calcFunc(x, calcFunc(x, y))) // calcFunc(10,10+2) // 結(jié)果是:22
	y = 20

}

分析:

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

執(zhí)行deferDemo()函數(shù)時(shí),會(huì)先執(zhí)行defer語(yǔ)句,再執(zhí)行函數(shù)體,函數(shù)體執(zhí)行完后,再執(zhí)行defer語(yǔ)句

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

開啟defer
結(jié)束defer
defer語(yǔ)句6
defer語(yǔ)句5
defer語(yǔ)句4
defer語(yǔ)句3
defer語(yǔ)句2
defer語(yǔ)句1

demo:

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

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

	fmt.Println("結(jié)束defer")
}

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

func deferDemo1() int {
	var a int

	defer func() {
		a++
	}()

	return a
}

deferDemo2執(zhí)行結(jié)果是1:原因返回匿名返回值a等待函數(shù)體內(nèi)操作完成才會(huì)執(zhí)行return

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

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

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

deferDemo3執(zhí)行結(jié)果是1: 原因返回匿名返回值a等待函數(shù)體內(nèi)操作完成才會(huì)執(zhí)行return

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

	return a
}

deferDemo4

func deferDemo4() int {
	x := 1

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

	return x // 1
}

deferDemo5

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

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

	return x // 1
}

deferDemo6

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

	defer func() {
		x++
	}()

	return x // 2
}

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

相關(guān)文章

  • golang time包的用法詳解

    golang time包的用法詳解

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

    通過示例深度理解Go channel range

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

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

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

    GO語(yǔ)言包管理工具go?mod以及包詳解

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

    GO的基礎(chǔ)知識(shí)掃盲注意事項(xiàng)

    這篇文章主要介紹了GO的基礎(chǔ)知識(shí)注意事項(xiàng),本文是GO語(yǔ)言小白的掃盲文,主要講解了go語(yǔ)言的基本知識(shí),GO程序目錄結(jié)構(gòu),GO程序包的導(dǎo)入與別名運(yùn)用,GO內(nèi)置關(guān)鍵字,GO注釋方法需要的朋友可以參考下
    2022-12-12
  • Golang實(shí)現(xiàn)檢測(cè)SSL證書有效期

    Golang實(shí)現(xiàn)檢測(cè)SSL證書有效期

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

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

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

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

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

    Go語(yǔ)言實(shí)現(xiàn)猜數(shù)字小游戲

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

    golang調(diào)用c實(shí)現(xiàn)的dll接口細(xì)節(jié)分享

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

最新評(píng)論

宜川县| 广饶县| 高安市| 泌阳县| 仪征市| 潢川县| 赤壁市| 宝山区| 北海市| 苗栗县| 太仆寺旗| 永靖县| 屏东县| 龙泉市| 芦溪县| 济南市| 肇源县| 富宁县| 浦北县| 海南省| 太仆寺旗| 奉贤区| 临沧市| 响水县| 体育| 清丰县| 安康市| 永善县| 武清区| 巍山| 清河县| 沂水县| 九寨沟县| 涞水县| 噶尔县| 香港 | 特克斯县| 和田县| 佛山市| 绥芬河市| 昭苏县|