欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言中init函數(shù)和defer延遲調(diào)用關(guān)鍵詞詳解

 更新時間:2023年03月24日 10:34:33   作者:shockWaveGo  
這篇文章主要介紹了Go語言中init函數(shù)和defer延遲調(diào)用關(guān)鍵詞,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Go語言中init函數(shù)和defer延遲調(diào)用關(guān)鍵詞

golang里面有兩個保留函數(shù)

        main 函數(shù)(只能應(yīng)用于package main)

        init 函數(shù)(能夠應(yīng)用于所有的package)

go程序會自動調(diào)用 init()和main() 所以你不能在任何地方調(diào)用這兩個函數(shù)

package main 必須包含一個main 函數(shù),但是每個package中的init函數(shù)都是可選的

一個package 里可以寫多個init函數(shù),建議每個包中只寫一個init函數(shù)

單個包中代碼執(zhí)行順序如下

        main包 --> 常量 -->全局變量 --> init函數(shù) --> main函數(shù) -->exit

多個包之間的代碼執(zhí)行順序

        先按層級import 包,從最后引入包中加載常量、變量、init(),返回上級包 繼續(xù)執(zhí)行 加載常量、變量、init()

defer關(guān)鍵字,延遲調(diào)用

go語言中沒有其他面向?qū)ο蟮奈鰳?gòu)函數(shù),但是go語言提供了defer語句用于實現(xiàn)其他面向?qū)ο笳Z言的析構(gòu)函數(shù)

defer常用于釋放資源、接觸鎖定以及錯誤處理等

無論在函數(shù)內(nèi)什么地方注冊defer 語句,他都會在所屬函數(shù)執(zhí)行完畢后才會執(zhí)行,并且如果注冊了多個的defer語句,他們會按照后進(jìn)先出(先進(jìn)后出)得原則執(zhí)行,所以一些資源我們開后就可以注冊defer語句關(guān)閉。

package main
import "fmt"
func main(){
    defer fmt.Println("我是第一個被注冊,最后被打印,因為defer先進(jìn)后出")
    fmt.Print("我先被打印")
    defer fmt.Println("我第二個被注冊,但是先被打印")
}

補充:go語言中defer關(guān)鍵字(延遲調(diào)用)用法你會嗎

一.defer關(guān)鍵字介紹:

Go語言中的defer語句會將其后面跟隨的語句進(jìn)行延遲處理,在defer歸屬的函數(shù)(如main函數(shù))即將返回時(即函數(shù)快結(jié)束),將延遲處理的語句按defer定義的逆序進(jìn)行執(zhí)行,也就是說,先被defer的語句最后被執(zhí)行,最后被defer的語句最先執(zhí)行

看代碼如下呢:

package main
 
import "fmt"
 
// Go語言中的defer語句會將其后面跟隨的語句進(jìn)行延遲處理
// 在defer歸屬的函數(shù)(如main函數(shù))即將返回時(即函數(shù)快結(jié)束),將延遲處理的語句按defer定義的逆序進(jìn)行執(zhí)行
// 也就是說,先被defer的語句最后被執(zhí)行,最后被defer的語句最先執(zhí)行
func main() {
	fmt.Println("start...")
	defer fmt.Println("1")
	defer fmt.Println("2")
	defer fmt.Println("3")
	fmt.Println("stop...")
}

而這是運行結(jié)果:

start...
stop...
3
2
1

可以看出,start...和stop...先被輸出,然后是3 2 1,即Go語言中的defer語句會將其后面跟隨的語句進(jìn)行延遲處理,在defer歸屬的函數(shù)(如main函數(shù))即將返回時(即函數(shù)快結(jié)束),將延遲處理的語句按defer定義的逆序進(jìn)行執(zhí)行,也就是說,先被defer的語句最后被執(zhí)行,最后被defer的語句最先執(zhí)行

到此這篇關(guān)于Go語言中init函數(shù)和defer延遲調(diào)用關(guān)鍵詞的文章就介紹到這了,更多相關(guān)go init函數(shù)和defer延遲調(diào)用關(guān)鍵詞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • GIN的路由以及傳參問題

    GIN的路由以及傳參問題

    本文主要介紹了GIN的路由以及傳參問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 通過Golang實現(xiàn)無頭瀏覽器截圖

    通過Golang實現(xiàn)無頭瀏覽器截圖

    在Web開發(fā)中,有時需要對網(wǎng)頁進(jìn)行截圖,以便進(jìn)行頁面預(yù)覽、測試等操作,本文為大家整理了Golang實現(xiàn)無頭瀏覽器的截圖的方法,感興趣的可以了解一下
    2023-05-05
  • 深入理解Golang中的dig包管理和解決依賴關(guān)系

    深入理解Golang中的dig包管理和解決依賴關(guān)系

    這篇文章主要為大家詳細(xì)介紹了golang中dig包的使用方法,探討其應(yīng)用場景,并提供一些示例,展示如何結(jié)合其他庫來更好地實現(xiàn)這些場景,感興趣的小伙伴可以了解下
    2024-01-01
  • Gin使用swagger生成接口文檔的代碼示例

    Gin使用swagger生成接口文檔的代碼示例

    Swagger 是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful Web 服務(wù),它使用 YAML 或 JSON 格式來定義 API 的結(jié)構(gòu),本文給大家介紹了Gin使用swagger生成接口文檔的代碼示例,需要的朋友可以參考下
    2024-06-06
  • go使用makefile腳本編譯應(yīng)用的方法小結(jié)

    go使用makefile腳本編譯應(yīng)用的方法小結(jié)

    makefile可以看作是make工具的腳本文件, 而make主要用來處理一系列命令。常用的比如用來編譯和打包文件, 在C/C++的編譯打包中應(yīng)用最廣泛了,這篇文章主要介紹了go使用makefile腳本編譯應(yīng)用,需要的朋友可以參考下
    2022-08-08
  • go-kit組件使用hystrix中間件的操作

    go-kit組件使用hystrix中間件的操作

    這篇文章主要介紹了go-kit組件使用hystrix中間件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 深入理解 Go 語言中的 Context

    深入理解 Go 語言中的 Context

    這篇文章主要介紹了 理解 Go 語言中的 Context,需要的朋友可以參考下
    2020-06-06
  • Go中init()執(zhí)行順序詳解

    Go中init()執(zhí)行順序詳解

    go允許定義多個init(),多個init()會涉及到執(zhí)行先后的問題,本文將詳細(xì)講解Go中init()執(zhí)行順序,感興趣的朋友一起看看吧
    2022-09-09
  • golang?中?recover()的使用方法

    golang?中?recover()的使用方法

    這篇文章主要介紹了Guam與golang??recover()的使用方法,Recover?是一個Go語言的內(nèi)建函數(shù),可以讓進(jìn)入宕機(jī)流程中的?goroutine?恢復(fù)過來,下文更多相關(guān)資料需要的小伙伴可以參考一下
    2022-04-04
  • go語言搬磚之go jmespath實現(xiàn)查詢json數(shù)據(jù)

    go語言搬磚之go jmespath實現(xiàn)查詢json數(shù)據(jù)

    這篇文章主要為大家介紹了go語言搬磚之go jmespath實現(xiàn)查詢json數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評論