1.import機(jī)制
●?main -> import pkg1 -> const -> var ... -> init() -> main()
●?pkg1 -> import pkg2 -> const -> ...
●?pkg2 -> ...
import(
? ? "time" ? ? ? ? ? ? ? ? ? ? ? //普通寫法
? ? . "fmt" ? ? ? ? ? ? ? ? ? ? ? //使用此包內(nèi)的成員時不帶fmt前綴
? ? j "encoding/json" ? ?//json包重命名
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 引入包順序遵循 標(biāo)準(zhǔn)庫,項目包拧揽,第三方包
)
????????不要使用相對路徑引入包(以GOPATH/src作為根目錄)
? ? ? ? import 后面跟著包路徑陕悬。go語言的慣例只是一個特例,即恰好目錄名與包名一致缕棵。import中的foo只是一個文件系統(tǒng)的路徑畔濒。而下面foo.Foo()中的foo則是包名。而這個包是在src/foo目錄下的源碼中找到的萤晴。
2. init函數(shù)
????????init函數(shù)可以在任何包中有0個或1個或多個胀茵; init函數(shù)和main函數(shù)都不能被顯示調(diào)用社露;
????????但這無論是對于可讀性還是以后的可維護(hù)性來說,強(qiáng)烈建議用戶在一個package中每個文件只寫一個init函數(shù)琼娘。
3. 變量初始化順序
? ? ? ? 全局變量初始化若有需要依賴其它變量峭弟,則被依賴的變量先初始化。但局部變量這樣的話就會報錯
? ? var a int = b + 1
? ? var b int = 1
????????下面例子會報?"initialization loop" 錯誤
? ?var a = b
? ?var b = c
? ?var c = a
4. 類型檢查
????????Go編譯器可以從初始化表達(dá)式的右值推導(dǎo)出該變量應(yīng)該聲明為哪種類型脱拼,這讓Go語言看起來有點像動態(tài)類型語言瞒瘸,但是Go語言實際上是強(qiáng)類型語言(靜態(tài)類型語言)