日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Go中init()執行順序詳解_Golang

作者:FeelTouch?Labs ? 更新時間: 2022-11-08 編程語言

概述

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

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

要點秘訣:

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

init()函數

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

init()函數在程序運行時,自動自動被調用執行,不能在代碼中主動調用它。

init()函數執行順序和時機 執行順序

先看一段執行代碼:

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

輸出結果:

5
Eth merge
Exiting.

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

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

執行時機

Go語言程序啟動會先從main包檢查其導入的所有包 ,每個包又可能導入了其他的包,由此Go編譯器由此構建出一個樹狀的包引用關系,再根據引用順序決定編譯順序,依次編譯這些包的代碼。

具體:

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

2.包中再引用包,最底層的葉子節點的init()先編譯,依次往上調用

即,在運行啟動時,最后導入的包會最先初始化并調用其init()函數,

原文鏈接:https://blog.csdn.net/feeltouch/article/details/126869416

欄目分類
最近更新