亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

golang中defer的基本使用教程

 更新時(shí)間:2022年06月29日 12:04:23   作者:Free_YaW  
go語(yǔ)言中defer可以完成延遲功能,當(dāng)前函數(shù)執(zhí)行完成后再執(zhí)行defer的代碼塊,下面這篇文章主要給大家介紹了關(guān)于golang中defer基本使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

第一次看go基礎(chǔ)語(yǔ)法的時(shí)候,用使用到了defer。但是一直不知道它到底是什么,有什么用途。這幾天通過(guò)查詢、學(xué)習(xí)。算是對(duì)defer有了一點(diǎn)淺顯的認(rèn)識(shí)。

1.什么是defer

defer是go中一種延遲調(diào)用機(jī)制,defer后面的函數(shù)只有在當(dāng)前函數(shù)執(zhí)行完畢后才能執(zhí)行,通常用于釋放資源。

2.defer的特點(diǎn)

defer遵循先進(jìn)后出的原則,類似于棧的結(jié)構(gòu)。

補(bǔ)充下:為什么要把defer設(shè)計(jì)成這種機(jī)制?

因?yàn)楹笊暾?qǐng)的資源和可能對(duì)前面申請(qǐng)的資源有依賴。如果先將前面申請(qǐng)的資源釋放掉了。對(duì)于后面的資源可能會(huì)造成影響。所以先釋放后申請(qǐng)的資源,再釋放前面申請(qǐng)的資源。

3.defer什么時(shí)間執(zhí)行

前面說(shuō)到,defer只有在當(dāng)前函數(shù)執(zhí)行完畢后,才會(huì)執(zhí)行。其實(shí)不太準(zhǔn)確。

go中的return語(yǔ)句并不是原子性操作,一般是分為兩步:

  • 將返回值賦值給一個(gè)變量
  • 執(zhí)行RET指令

defer就執(zhí)行在1之后,2之前。

4.defer常見的坑

1.輸出是多少?

	x := 10
	defer func(a int) {
		fmt.Println(a)
	}(x)
	x++

答案:

為什么?

因?yàn)閐efer后面的函數(shù)在入棧的時(shí)候保存的是入棧那一刻的值,而當(dāng)時(shí)x的值是10,所以后期對(duì)x修改,并不會(huì)影響棧內(nèi)函數(shù)的值。

2.輸出多少

	x := 10
	defer func(a *int) {
		fmt.Println(*a)
	}(&x)
	x++

答案:

為什么?

這里defer后面函數(shù)入棧的時(shí)候存入的執(zhí)行變量x的指針。所以,后期x值改變的時(shí)候,輸出結(jié)果也會(huì)改變。

3.輸出多少

func test()(x int)  {
	 x = 10
	 defer func() {
	 	x++
	 }()
	 return x
}

答案:

為什么?

之前我們說(shuō)過(guò),return并不是原子性操作,是通過(guò)一個(gè)變量賦值和ret指令來(lái)完成的。

而上述例子中,是具名函數(shù)。即返回值帶有名字。這樣我們?cè)趫?zhí)行defer的時(shí)候相當(dāng)于修改了返回值的值。所以為11

看到這里,博主想到了閉包。和閉包有沒(méi)有關(guān)系呢?

4.輸出什么

func test1() int {
	x := 10
	defer func() {
		x++
	}()
	// ans = x
	// -------- defer x = x+1
	// return x
	return x
}

答案:

為什么?
 

還是return語(yǔ)句的原因,博主已經(jīng)在代碼中給出提示。可見,非具名函數(shù)不會(huì)受到相應(yīng)的影響。

對(duì)于defer暫時(shí)理解了這些,下次再見。

總結(jié)

到此這篇關(guān)于golang中defer基本使用的文章就介紹到這了,更多相關(guān)go defer使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言實(shí)現(xiàn)lru淘汰策略和超時(shí)過(guò)期

    Go語(yǔ)言實(shí)現(xiàn)lru淘汰策略和超時(shí)過(guò)期

    緩存的大小是有限的,當(dāng)添加數(shù)據(jù)發(fā)現(xiàn)剩余緩存不夠時(shí),需要淘汰緩存中的部分?jǐn)?shù)據(jù),本文主要介紹了Go語(yǔ)言實(shí)現(xiàn)lru淘汰策略和超時(shí)過(guò)期,感興趣的可以了解一下
    2024-02-02
  • golang實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽文件并自動(dòng)切換目錄

    golang實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽文件并自動(dòng)切換目錄

    這篇文章主要給大家介紹了golang實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽文件,并自動(dòng)切換目錄,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的參考價(jià)值,需要的朋友可以參考下
    2023-12-12
  • Go單元測(cè)試?yán)鱰estify使用示例詳解

    Go單元測(cè)試?yán)鱰estify使用示例詳解

    這篇文章主要為大家介紹了Go單元測(cè)試?yán)鱰estify使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • GoFrame?gredis配置文件及配置方法對(duì)比

    GoFrame?gredis配置文件及配置方法對(duì)比

    這篇文章主要為大家介紹了GoFrame?gredis配置管理中,配置文件及配置方法對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 解決Goland 提示 Unresolved reference 錯(cuò)誤的問(wèn)題

    解決Goland 提示 Unresolved reference 錯(cuò)誤的問(wèn)題

    這篇文章主要介紹了解決Goland 提示 Unresolved reference 錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • go語(yǔ)言if/else語(yǔ)句簡(jiǎn)單用法示例

    go語(yǔ)言if/else語(yǔ)句簡(jiǎn)單用法示例

    這篇文章主要介紹了go語(yǔ)言if/else語(yǔ)句用法,結(jié)合實(shí)例形式分析了go語(yǔ)言if else語(yǔ)句的判定與流程控制技巧,需要的朋友可以參考下
    2016-05-05
  • golang將多路復(fù)異步io轉(zhuǎn)成阻塞io的方法詳解

    golang將多路復(fù)異步io轉(zhuǎn)成阻塞io的方法詳解

    常見的IO模型有阻塞、非阻塞、IO多路復(fù)用,異,下面這篇文章主要給大家介紹了關(guān)于golang將多路復(fù)異步io轉(zhuǎn)成阻塞io的方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • go語(yǔ)言中GOPATH GOROOT的作用和設(shè)置方式

    go語(yǔ)言中GOPATH GOROOT的作用和設(shè)置方式

    這篇文章主要介紹了go語(yǔ)言中GOPATH GOROOT的作用和設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • golang連接kafka消費(fèi)進(jìn)ES操作

    golang連接kafka消費(fèi)進(jìn)ES操作

    這篇文章主要介紹了golang連接kafka消費(fèi)進(jìn)ES操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 基于微服務(wù)框架go-micro開發(fā)gRPC應(yīng)用程序

    基于微服務(wù)框架go-micro開發(fā)gRPC應(yīng)用程序

    這篇文章介紹了基于微服務(wù)框架go-micro開發(fā)gRPC應(yīng)用程序的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07

最新評(píng)論