go語言中包(package)與java中的包(package)非常類似,都是組織代碼的方式,而且都和磁盤上的目錄結構存在對應關系。
go語言中,包名一般為go代碼所在的目錄名,但是與java不同的是,go語言中包名只有一級,而在java中包名是以點分割的多級目錄組合的。
go語言中,引用包時需要以GOPATH/src目錄為相對根目錄,依次輸入下面的各級目錄名。
如:環境變量GOPATH = ~/go
包hello下有hello.go,包所在的磁盤路徑為:
~/go/src/golang_everyday/hello
也就是說,hello.go的路徑為:
~/go/src/golang_everyday/hello/hello.go
則在其它文件中引用該go文件時,代碼應為:
import "golang_everyday/hello"
如果存在多個GOPATH,編譯時,go會挨着去每個GOPATH的src下找,直到找到為止。
main是一個特殊的package名字,類似Java的main函數,GO的可執行程序必須在main package下,main包所在的文件夾一般都不叫main。
在同一個package里,多個文件被go編譯器看作是一個文件一樣,因此,這多個文件中不能出現相同的全局變量和函數,一個例外是init函數;而同一個package的不同文件可以直接引用相互之間的數據。