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

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

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

概述

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

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

要點(diǎn)秘訣:

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

init()函數(shù)

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

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.

可見就目前三者來講順序如下:

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

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

Go語言程序啟動(dòng)會(huì)先從main包檢查其導(dǎo)入的所有包 ,每個(gè)包又可能導(dǎo)入了其他的包,由此Go編譯器由此構(gòu)建出一個(gè)樹狀的包引用關(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)文章

  • golang并發(fā)下載多個(gè)文件的方法

    golang并發(fā)下載多個(gè)文件的方法

    今天小編就為大家分享一篇golang并發(fā)下載多個(gè)文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • golang中實(shí)現(xiàn)給gif、png、jpeg圖片添加文字水印

    golang中實(shí)現(xiàn)給gif、png、jpeg圖片添加文字水印

    這篇文章主要介紹了golang中實(shí)現(xiàn)給gif、png、jpeg圖片添加文字水印,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Golang判斷struct/slice/map是否相等以及對(duì)比的方法總結(jié)

    Golang判斷struct/slice/map是否相等以及對(duì)比的方法總結(jié)

    平時(shí)開發(fā)中對(duì)比兩個(gè)struct或者map、slice是否相等是經(jīng)常遇到的,有很多對(duì)比的方式,比如==,reflect.DeepEqual(),cmp.Equal()等也是經(jīng)常容易混淆的,這么多種對(duì)比方式,適用場(chǎng)景和優(yōu)缺點(diǎn)都有哪些呢?今天我們來具體總結(jié)一下,感興趣的小伙伴們可以參考借鑒
    2022-11-11
  • Go語言使用Etcd實(shí)現(xiàn)分布式鎖

    Go語言使用Etcd實(shí)現(xiàn)分布式鎖

    etcd是近幾年比較火熱的一個(gè)開源的、分布式的鍵值對(duì)數(shù)據(jù)存儲(chǔ)系統(tǒng),本文將介紹如何利用Etcd實(shí)現(xiàn)分布式鎖,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-05-05
  • Golang 文件操作:刪除指定的文件方式

    Golang 文件操作:刪除指定的文件方式

    這篇文章主要介紹了Golang 文件操作:刪除指定的文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 淺析Go語言中的方法集合與選擇receiver類型

    淺析Go語言中的方法集合與選擇receiver類型

    這篇文章主要為大家詳細(xì)介紹了Go語言中的方法集合與選擇receiver類型的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們深入學(xué)習(xí)go語言有一定的幫助,需要的可以參考下
    2023-11-11
  • go web 處理表單的輸入的說明

    go web 處理表單的輸入的說明

    今天給大家普及go表單輸入方面的知識(shí)點(diǎn),整體代碼分為前端頁面和后端處理方法,通過代碼給大家介紹的很詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-06-06
  • Golang并發(fā)繞不開的重要組件之Goroutine詳解

    Golang并發(fā)繞不開的重要組件之Goroutine詳解

    Goroutine、Channel、Context、Sync都是Golang并發(fā)編程中的幾個(gè)重要組件,這篇文中主要為大家介紹了Goroutine的相關(guān)知識(shí),需要的可以參考一下
    2023-06-06
  • Go語言中節(jié)省內(nèi)存技巧方法示例

    Go語言中節(jié)省內(nèi)存技巧方法示例

    這篇文章主要為大家介紹了Go語言中節(jié)省內(nèi)存技巧方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Go項(xiàng)目中添加生成時(shí)間與版本信息的方法

    Go項(xiàng)目中添加生成時(shí)間與版本信息的方法

    本文主要介紹了Go項(xiàng)目中添加生成時(shí)間與版本信息的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評(píng)論