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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

看代碼如下呢:

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

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

start...
stop...
3
2
1

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

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

相關(guān)文章

  • Go計(jì)時(shí)器的示例代碼

    Go計(jì)時(shí)器的示例代碼

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

    go開(kāi)源Hugo站點(diǎn)構(gòu)建三步曲之集結(jié)渲染

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

    深入解析Go語(yǔ)言中上下文超時(shí)與子進(jìn)程管理

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

    Go語(yǔ)言七篇入門教程四通道及Goroutine

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

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

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

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

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

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

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

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

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

    Go Gorm 示例詳解

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

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

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

最新評(píng)論

论坛| 涪陵区| 土默特左旗| 确山县| 阳春市| 遵义县| 山东省| 凉城县| 信宜市| 阿拉善左旗| 两当县| 简阳市| 文山县| 灌云县| 南丰县| 舒城县| 桓台县| 安福县| 泰安市| 澄江县| 浑源县| 龙南县| 南靖县| 镇宁| 菏泽市| 定安县| 屏东市| 即墨市| 锡林浩特市| 尼勒克县| 错那县| 绥宁县| 松滋市| 鄄城县| 介休市| 临夏市| 靖西县| 阳新县| 东乡族自治县| 高阳县| 南宁市|