golang 初始化順序
1.import機制
● main -> import pkg1 -> const -> var ... -> init() -> main()
● pkg1 -> import pkg2 -> const -> ...
● pkg2 -> ...
import( "time" //普通寫法 . "fmt" //使用此包內的成員時不帶fmt字首 j "encoding/json" //json包重新命名 // 引入包順序遵循 標準庫,專案包,第三方包 )
不要使用相對路徑引入包(以GOPATH/src作為根目錄)
import 後面跟著包路徑。go語言的慣例只是一個特例,即恰好目錄名與包名一致。import中的foo只是一個檔案系統的路徑。而下面foo.Foo()中的foo則是包名。而這個包是在src/foo目錄下的原始碼中找到的。
2. init函式
init函式可以在任何包中有0個或1個或多個; init函式和main函式都不能被顯示呼叫;
但這無論是對於可讀性還是以後的可維護性來說,強烈建議使用者在一個package中每個檔案只寫一個init函式。
3. 變數初始化順序
全域性變數初始化若有需要依賴其它變數,則被依賴的變數先初始化。但區域性變數這樣的話就會報錯
var a int = b + 1 var b int = 1
下面例子會報 "initialization loop" 錯誤
var a = b var b = c var c = a
4. 型別檢查
Go編譯器可以從初始化表示式的右值推匯出該變數應該宣告為哪種型別,這讓Go語言看起來有點像動態型別語言,但是Go語言實際上是強型別語言(靜態型別語言)