go裡面有兩個保留的函式:init
函式(能夠應用於所有的package
)和main
函式(只能應用於package main
)。
這兩個函式在定義時不能有任何的引數和返回值。
雖然乙個package
裡面可以寫任意多個init
函式,但這無論是對於可讀性還是以後的可維護性來說,
我們都強烈建議使用者在乙個package
中每個檔案只寫乙個init
函式。
go程式會自動呼叫init()
和main()
,所以你不需要在任何地方呼叫這兩個函式。
每個package
中的init
函式都是可選的,但package main
就必須包含乙個main
函式。
程式的初始化和執行都起始於main
包。如果main
包還匯入了其它的包,那麼就會在編譯時將它們依次匯入。
有時乙個包會被多個包同時匯入,那麼它只會被匯入一次(例如很多包可能都會用到fmt
包,但它只會被匯入一次,因為沒有必要匯入多次)。
當乙個包被匯入時,如果該包還匯入了其它的包,那麼會先將其它包匯入進來,然後再對這些包中的包級常量和變數進行初始化,
接著執行init
函式(如果有的話),依次類推。
等所有被匯入的包都載入完畢了,就會開始對main
包中的包級常量和變數進行初始化,
然後執行main
包中的init
函式(如果存在的話),最後執行main
函式。下圖詳細地解釋了整個執行過程:
圖2.6 main函式引入包初始化流程圖
go中的main函式和init函式
go 裡面有兩個保留的函式 init 函式 能夠應用於所有的 package 和main 函式 只能應用於 package main 這兩個函式在定義時不能有任何的引數和返回值。雖然乙個 package 裡面可以寫任意多個 init 函式,但這無論是對於可讀性還是以後的可維護性來說,我們都強烈建議使...
go中的main函式和init函式
go裡面有兩個保留的函式 init 函式 能夠應用於所有的 package 和main 函式 只能應用於 package main 這兩個函式在定義時不能有任何的引數和返回值。雖然乙個 package 裡面可以寫任意多個 init 函式,但這無論是對於可讀性還是以後的可維護性來說,我們都強烈建議使用...
go中的main函式和init函式
go裡面有兩個保留的函式 init函式 能夠應用於所有的package 和main函式 只能應用於package main 這兩個函式在定義時不能有任何的引數和返回值。雖然乙個package裡面可以寫任意多個init函式,但這無論是對於可讀性還是以後的可維護性來說,我們都強烈建議使用者在乙個pack...