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

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

 更新時(shí)間:2022年09月16日 10:32:01   作者:FeelTouch Labs  
go允許定義多個(gè)init(),多個(gè)init()會(huì)涉及到執(zhí)行先后的問(wèn)題,本文將詳細(xì)講解Go中init()執(zhí)行順序,感興趣的朋友一起看看吧

概述

init()一般用來(lái)做一些初始化工作, go允許定義多個(gè)init(),根據(jù)init()重復(fù)場(chǎng)景不同,可以分為

  • 同文件 單文件中定義多個(gè)init()
  • 同模塊 同模塊下不同文件中定義了多個(gè)init()
  • 子模塊 本模塊和子模塊都包含init()
  • 跨模塊 多個(gè)被引用模塊中均含init()

要點(diǎn)秘訣:

  • 涉及引用時(shí),先加載的先執(zhí)行
  • 同一文件中,先定義的先執(zhí)行

init()函數(shù)

init()函數(shù)沒(méi)有參數(shù),也沒(méi)有返回值。

init()函數(shù)在程序運(yùn)行時(shí),自動(dòng)自動(dòng)被調(diào)用執(zhí)行,不能在代碼中主動(dòng)調(diào)用它。

init()函數(shù)執(zhí)行順序和時(shí)機(jī) 執(zhí)行順序

先看一段執(zhí)行代碼:

package main
 
import "fmt"
 
var x int8 = 5
 
const name = "Vitalik"
 
func init() {
	fmt.Println(x)
}
func main() {
	fmt.Println("Eth merge")
}

輸出結(jié)果:

5
Eth merge
Exiting.

可見(jiàn)就目前三者來(lái)講順序如下:

全局變量 -> init() -> main()

執(zhí)行時(shí)機(jī)

Go語(yǔ)言程序啟動(dòng)會(huì)先從main包檢查其導(dǎo)入的所有包 ,每個(gè)包又可能導(dǎo)入了其他的包,由此Go編譯器由此構(gòu)建出一個(gè)樹(shù)狀的包引用關(guān)系,再根據(jù)引用順序決定編譯順序,依次編譯這些包的代碼。

具體:

1. main引用的同級(jí)包,按引用順序依次編譯

2.包中再引用包,最底層的葉子節(jié)點(diǎn)的init()先編譯,依次往上調(diào)用

即,在運(yùn)行啟動(dòng)時(shí),最后導(dǎo)入的包會(huì)最先初始化并調(diào)用其init()函數(shù),

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

相關(guān)文章

  • 分析Go錯(cuò)誤處理優(yōu)化go?recover機(jī)制缺陷

    分析Go錯(cuò)誤處理優(yōu)化go?recover機(jī)制缺陷

    這篇文章主要為大家介紹了分析Go錯(cuò)誤處理優(yōu)化go?recover機(jī)制缺陷示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Go Asynq異步任務(wù)處理的實(shí)現(xiàn)

    Go Asynq異步任務(wù)處理的實(shí)現(xiàn)

    Asynq是一個(gè)新興的異步任務(wù)處理解決方案,它提供了輕量級(jí)的、易于使用的API,本文主要介紹了Go Asynq異步任務(wù)處理的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-06-06
  • Go基礎(chǔ)教程系列之Go接口使用詳解

    Go基礎(chǔ)教程系列之Go接口使用詳解

    這篇文章主要介紹了Go基礎(chǔ)教程系列之Go接口使用詳解,需要的朋友可以參考下
    2022-04-04
  • Golang使用gzip壓縮字符減少redis等存儲(chǔ)占用的實(shí)現(xiàn)

    Golang使用gzip壓縮字符減少redis等存儲(chǔ)占用的實(shí)現(xiàn)

    本文主要介紹了Golang使用gzip壓縮字符減少redis等存儲(chǔ)占用的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Go結(jié)合JavaScript實(shí)現(xiàn)抓取網(wǎng)頁(yè)中的圖像鏈接

    Go結(jié)合JavaScript實(shí)現(xiàn)抓取網(wǎng)頁(yè)中的圖像鏈接

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言如何結(jié)合JavaScript實(shí)現(xiàn)抓取網(wǎng)頁(yè)中的圖像鏈接,文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • 手把手帶你走進(jìn)Go語(yǔ)言之運(yùn)算符解析

    手把手帶你走進(jìn)Go語(yǔ)言之運(yùn)算符解析

    這篇文章主要介紹了手Go語(yǔ)言之運(yùn)算符解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 一文詳解Go中方法接收器的選擇

    一文詳解Go中方法接收器的選擇

    許多 Go 初學(xué)者在方法接收器的選擇上可能會(huì)感到困惑,不知道該選擇值接收器還是指針接收器。本文將會(huì)對(duì)方法接收器進(jìn)行介紹,并給出如何選擇正確方法接收器的指導(dǎo)建議,希望對(duì)大家有所幫助
    2023-04-04
  • golang協(xié)程池設(shè)計(jì)詳解

    golang協(xié)程池設(shè)計(jì)詳解

    這篇文章主要介紹了golang協(xié)程池設(shè)計(jì)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Golang基于文件魔數(shù)判斷文件類(lèi)型的案例代碼

    Golang基于文件魔數(shù)判斷文件類(lèi)型的案例代碼

    這篇文章主要介紹了Golang基于文件魔數(shù)判斷文件類(lèi)型,本文介紹了基于文件魔數(shù)判斷文件類(lèi)型的方法,主要涉及如何ReadSeek讀取文件指定字節(jié)內(nèi)容,然后介紹文件魔數(shù),最后給出示例基于魔數(shù)判斷文件類(lèi)型,需要的朋友可以參考下
    2023-02-02
  • 如何避免Go語(yǔ)言常見(jiàn)錯(cuò)誤之意外的變量隱藏

    如何避免Go語(yǔ)言常見(jiàn)錯(cuò)誤之意外的變量隱藏

    在Go語(yǔ)言中,變量隱藏(Variable Shadowing)是一個(gè)常見(jiàn)的錯(cuò)誤來(lái)源,變量隱藏發(fā)生在一個(gè)內(nèi)部作用域中聲明的變量與外部作用域的變量同名時(shí),這可能導(dǎo)致開(kāi)發(fā)者無(wú)意中使用了錯(cuò)誤的變量,造成難以追蹤的bug,本文講解一些關(guān)于變量隱藏的常見(jiàn)錯(cuò)誤和如何避免它們的方法
    2024-01-01

最新評(píng)論