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語言實際上是強類型語言(靜態類型語言)