Go語言特殊函數介紹

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()你會發如今執行過程當中這兩個不會按照你想象中的順序執行。這兩個函數官方只推薦在測試環境中使用,對於正式環境不要使用。

相關文章
相關標籤/搜索