網站首頁 編程語言 正文
概述
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
相關推薦
- 2022-05-09 python?itertools包內置無限迭代器_python
- 2022-10-15 flask路由分模塊管理及自定義restful響應格式詳解_python
- 2023-01-28 深入分析Python中Lambda函數的用法_python
- 2022-08-21 Caffe圖像數據轉換成可運行leveldb?lmdb文件_其它綜合
- 2022-07-31 Python異常對象Exception基礎類異常捕捉_python
- 2022-07-11 Verilog中reg和SystemVerilog中logic的區別
- 2022-11-14 JVM中的垃圾回收
- 2022-02-04 SQL語句:空值判斷
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支