go語言初始化init

參考: https://studygolang.com/articles/6464
在一個go文件中, 初始化順序規則:
(1)引入的包
(2) 當前包中的變量常量
(3) 當前包的init
(4)main函數

  1. 當前go源文件中, 每一個被Import的包, 按其在源文件中出現順序初始化。
  2. 如果當前包有多個init在不同的源文件中, 則按源文件名以字典序從小到大排序,小的先被執行到, 同一包且同一源文件中的init,則按其出現在文件中的先後順序依次初始化; 當前包的package level變量常量也遵循這個規則; 其實準確來說,應是按提交給編譯器的源文件名順序爲準,只是在提交編譯器之前, go命令行工具對源文件名按字典序排序了。
  3. init只可以由go runtine自已調用, 我們在代碼中不可以顯示調用,也不可以被引用,如賦給a function variable。
  4. 包A 引入包B , 包B又引入包C, 則包的初始化順序爲: C -> B -> A
  5. 引入包,必須避免死循環,如 A 引 B , B引C, C引A.
  6. 一個包被其它多個包引入,如A -> B ->C 和 H -> I -> C , C被其它包引了2次, 但是注意包C只被初始化一次。
  7. 另一個大原則, 被依賴的總是先被初始化,當然呀。
  8. main包總是被最後一個初始化,這很好理解,因爲它總是依賴別的包。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章