golang中的init函式和main函式
阿新 • • 發佈:2021-09-20
一. Init函式:
1. init函式是用於程式執行前做包的初始化的函式,比如初始化包裡的變數等
2.每個包可以擁有多個init函式
3.包的每個原始檔也可以擁有多個init函式
4.同一個包中多個init函式的執行順序go語言沒有明確的定義(說明)
5.不同包的init函式按照包匯入的依賴關係決定該初始化函式的執行順序
6.init函式不能被其他函式呼叫,而是在main函式執行之前,自動被呼叫
二.main函式:
Go語言程式的預設入口函式(主函式):func main()
函式體用{}一對括號包裹。
func main(){
//函式體
}
三.相同點:
兩個函式在定義時不能有任何的引數和返回值,且Go程式自動呼叫。
四.不同點:
init可以應用於任意包中,且可以重複定義多個。
main函式只能用於main包中,且只能定義一個。
五.執行順序:
兩個函式的執行順序:
對同一個go檔案的init()呼叫順序是從上到下的。
對同一個package中不同檔案是按檔名字串比較“從小到大”順序呼叫各檔案中的init()函式。
對於不同的package,如果不相互依賴的話,按照main包中"先import的後呼叫"的順序呼叫其包中的init(),
如果package存在依賴,則先呼叫最早被依賴的package中的init(),最後呼叫main函式。
如果init函式中使用了println()或者print()你會發現在執行過程中這兩個不會按照你想象中的順序執行。
這兩個函式官方只推薦在測試環境中使用,對於正式環境不要使用。