引入包有以下幾種方式:
1. 最簡單的方式引入一個包的方式是直接引入包,例如:
import "fmt"
import "os"
2. 也可以通過下面的方式將包一塊引入,並寫在括號內:
import (
"fmt"
"os"
)
通過上面的方式,可以引入系統包或第三方的包,下面重點介紹如何引入自定義的包和函數:
一般我們將主程序放在src的main文件夾下(主程序中包含main函數,並將主程序的包名寫為package main),將其他模塊放在相應的文件夾下,例如下圖所示
主函數在main.go文件中,主函數名也可以為其他,但必須包含main函數。在Go編程中,怎么引入自己編寫的模塊呢,例如在main.go中如何調用add.go、subtract.go或者是multiply.go中的文件。
add.go與subtract.go在cal文件夾下,所以這兩個程序的包名為cal(package cal),multiply.go在multi文件夾下,所以程序的包名為multi(package multi)。如果main函數要調用add.go或者subtract.go中的函數,必須要引入包"cal"(import "cal")。要調用multiply.go中的函數,那就要引入包"multi",如果我們在程序中直接寫import "multi",編譯器會提示我們can not find package "multi"。因為我們的"multi"包在包"cal"下,所以我們要把包名寫完整"cal/multi",下面就可以調用各個文件中的函數了。
Go中如果函數名的首字母大寫,表示該函數是公有的,可以被其他程序調用,如果首字母小寫,該函數就是是私有的,因此我們只能調用add.go、subtract.go或者multiply.go中的公有函數。具體調用如下圖:
最后注意:文件名可以和該包名不一致,但文件中使用的包名必須要和該包名一致。
包的命名
go語言的包的命名,遵循簡潔、小寫、和go文件所在目錄同名的原則,這樣就便於我們引用,書寫以及快速定位查找。對於在企業當中開發的程序而言,我們一般采用域名作為頂級包名的方式,這樣就不用擔心和其他開發者包名重復的問題了,比如公司的域名是`www.bboyHan.com`,那么開發的go程序都以`bboyHan.com`作為全路徑中的最頂層部分,導入開發的工具包則可以寫為:
package main import "bboyHan.com/utils"
Main
當把一個go文件的包名聲明為main時,就等於告訴go編譯程序,這是一個可執行程序,那么go編譯程序就會嘗試把它編譯為一個二進制的可執行文件。如果沒有這個函數,程序就無法執行。
Go編譯器又是如何去尋找各個文件、包之間的依賴關系而構建程序的呢?
環境變量GOROOT和GOPATH兩個概念,這是兩個定義路徑的環境變量,GOROOT是安裝Go的路徑,比如 C:\go ;GOPATH是我們自己定義的開發者個人的工作空間,比如C:\workspace\src\bbboyHan。
編譯器會使用我們設置的這兩個路徑,再加上import導入的相對全路徑來查找磁盤上的包,比如我們導入的fmt包,編譯器最終找到的是 C:\go\fmt 這個位置。對於包的查找,是有優先級的,編譯器會優先在GOROOT里搜索,其次是GOPATH,一旦找到,就會馬上停止搜索。如果最終都沒找到,就會報編譯異常了。