main
函數Go語言程序的默認入口函數(主函數):func main()
函數體用{}一對括號包裹。
只能應用於package main函數
func main(){ //函數體 }
init
函數go語言中init
函數用於包package
的初始化,該函數是go語言的一個重要特性。測試
init函數有下面的特徵:spa
一、init函數是用於程序執行前作包的初始化的函數,好比初始化包裏的變量等code
二、每一個包能夠擁有多個init函數blog
三、包的每一個源文件也能夠擁有多個init函數字符串
四、同一個包中多個init函數的執行順序go語言沒有明確的定義(說明)it
五、不一樣包的init函數按照包導入的依賴關係決定該初始化函數的執行順序class
六、init函數不能被其餘函數調用,而是在main函數執行以前,自動被調用import
init
函數和 main
函數的異同相同點:
兩個函數在定義時不能有任何的參數和返回值,且Go程序自動調用。變量
不一樣點:
init函數能夠應用於任意包中,且能夠重複定義多個。
main函數只能用於main包中,且只能定義一個。
對同一個go文件的init()
調用順序是從上到下的。
對同一個package
中不一樣文件是按文件名字符串比較「從小到大」順序調用各文件中的init()
函數。
對於不一樣的package
,若是不相互依賴的話,按照main包中"先import的後調用"的順序調用其包中的init()
,若是package
存在依賴,則先調用最先被依賴的package
中的init()
,最後調用main函數。
若是init函數中使用了println()
或者print()
你會發如今執行過程當中這兩個不會按照你想象中的順序執行。這兩個函數官方只推薦在測試環境中使用,對於正式環境不要使用。