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

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

 更新時間:2023年03月24日 10:34:33   作者:shockWaveGo  
這篇文章主要介紹了Go語言中init函數(shù)和defer延遲調(diào)用關(guān)鍵詞,本文給大家介紹的非常詳細,對大家的學(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語句,他們會按照后進先出(先進后出)得原則執(zhí)行,所以一些資源我們開后就可以注冊defer語句關(guān)閉。

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

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

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

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

看代碼如下呢:

package main
 
import "fmt"
 
// Go語言中的defer語句會將其后面跟隨的語句進行延遲處理
// 在defer歸屬的函數(shù)(如main函數(shù))即將返回時(即函數(shù)快結(jié)束),將延遲處理的語句按defer定義的逆序進行執(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語句會將其后面跟隨的語句進行延遲處理,在defer歸屬的函數(shù)(如main函數(shù))即將返回時(即函數(shù)快結(jié)束),將延遲處理的語句按defer定義的逆序進行執(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)文章

  • Go計時器的示例代碼

    Go計時器的示例代碼

    定時器是任何編程語言的重要工具,它允許開發(fā)人員在特定時間間隔安排任務(wù)或執(zhí)行代碼,本文主要介紹了Go計時器的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • go開源Hugo站點構(gòu)建三步曲之集結(jié)渲染

    go開源Hugo站點構(gòu)建三步曲之集結(jié)渲染

    這篇文章主要為大家介紹了go開源Hugo站點構(gòu)建三步曲之集結(jié)渲染詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 深入解析Go語言中上下文超時與子進程管理

    深入解析Go語言中上下文超時與子進程管理

    這篇文章小編將通過一個實際問題的案例,和大家深入探討一下Go語言中的上下文超時和子進程管理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Go語言七篇入門教程四通道及Goroutine

    Go語言七篇入門教程四通道及Goroutine

    這篇文章主要為大家介紹了Go語言的通道及Goroutine示例詳解,本文是Go語言七篇入門系列篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • golang?chan傳遞數(shù)據(jù)的性能開銷詳解

    golang?chan傳遞數(shù)據(jù)的性能開銷詳解

    這篇文章主要為大家詳細介紹了Golang中chan在接收和發(fā)送數(shù)據(jù)時因為“復(fù)制”而產(chǎn)生的開銷,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2024-01-01
  • GoFrame實現(xiàn)順序性校驗示例詳解

    GoFrame實現(xiàn)順序性校驗示例詳解

    這篇文章主要為大家介紹了GoFrame實現(xiàn)順序性校驗示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 詳解Go語言strconv與其他基本數(shù)據(jù)類型轉(zhuǎn)換函數(shù)的使用

    詳解Go語言strconv與其他基本數(shù)據(jù)類型轉(zhuǎn)換函數(shù)的使用

    這篇文章將以 string 類型為中心,通過 strconv 標準庫,介紹其與其他基本數(shù)據(jù)類型相互轉(zhuǎn)換的函數(shù)。文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-12-12
  • golang(gin)的全局統(tǒng)一異常處理方式,并統(tǒng)一返回json

    golang(gin)的全局統(tǒng)一異常處理方式,并統(tǒng)一返回json

    這篇文章主要介紹了golang(gin)的全局統(tǒng)一異常處理方式,并統(tǒng)一返回json,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Go Gorm 示例詳解

    Go Gorm 示例詳解

    Gorm是一款高性能的Golang ORM庫,便于開發(fā)人員提高效率,本文介紹了Gorm的基本概念、數(shù)據(jù)庫連接、基本操作(創(chuàng)建表、新增記錄、查詢記錄、修改記錄、刪除記錄)等,本文介紹Go Gorm的相關(guān)知識,感興趣的朋友一起看看吧
    2025-01-01
  • 關(guān)于Golang的Map的線程安全問題的解決方案

    關(guān)于Golang的Map的線程安全問題的解決方案

    在?Golang?編程中,map?是一種常用的數(shù)據(jù)結(jié)構(gòu),用于存儲鍵值對,然而,Golang?的?map?在并發(fā)訪問時是線程不安全的,本文將詳細介紹?Golang?中?map?的線程不安全性,并提供一些解決方案,幫助開發(fā)者在并發(fā)編程中正確使用?map,需要的朋友可以參考下
    2024-11-11

最新評論

清丰县| 黄平县| 金川县| 白河县| 萍乡市| 朔州市| 钟山县| 中宁县| 安龙县| 天水市| 万全县| 洛南县| 高安市| 克山县| 渝北区| 扎兰屯市| 霸州市| 兴隆县| 澳门| 株洲市| 盘山县| 大冶市| 阿合奇县| 方正县| 城固县| 江油市| 曲靖市| 那曲县| 扎兰屯市| 建阳市| 旺苍县| 兴安县| 涞水县| 甘南县| 新河县| 涿鹿县| 淮南市| 岳普湖县| 慈溪市| 新兴县| 五原县|