這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
我想說的是,好傢夥Golang的項目構建稍有些繁瑣呀,使用者體驗來說沒有python、java那麼簡單方便。 在Google搜尋golang package自訂包方面的資料,發現搜尋的結果不是很令人滿意。不是說的很淺,就是說的很深,都伸到編譯器層面了,蒙圈…
該文章寫的有些亂,歡迎來噴 ! 另外文章後續不斷更新中,請到原文地址查看更新. http://xiaorui.cc/2016/03/13/%E5%85%B3%E4%BA%8Egolang-package%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8C%85%E7%BB%93%E6%9E%84/
廢話少說,直接開始聊Golang的package關鍵字與項目組織代碼的用法。
Golang項目目錄下一般有三個子目錄:
– src存放原始碼 pkg編譯後產生的檔案 bin編譯後產生的可執行檔
一個目錄下的.go檔案裡的package包名要一樣,不然你import後會出現各種問題。package中的名稱最好與目錄名一樣,這樣在import的時候直接import目錄名就好了。如果你的目錄名跟包名package不一致,那麼import 上層的目錄就可以了。
Golang要構建一個項目有這麼幾個點要注意.
1. 首先要注意GOPATH環境,一定要確保你的項目在GOPATH內。
2. 盡量要讓目錄名跟package一致, 這樣import引入自訂包時候不會出問題
3. main是一個特殊的package名字,類似Java的main函數,GO的可執行程式必須在main package下
我們開始建立一個新的項目,並自訂幾個包,在main裡應用這些包,也可以讓同一個package包的不同檔案互相的調用函數方法。
Python#http://xiaorui.cc#一定確保你的項目在GOPATH環境變數裡面,GOPATH可以用; 分好定義多個環境位置。$ echo $GOPATH/Users/ruifengyun/gg::/Users/ruifengyun/project#src一般是用來存放具體代碼的.# ruifengyun at xiaorui in ~/project/src [11:42:54]$ pwd/Users/ruifengyun/project/src#下面是項目的代碼結構. # ruifengyun at xiaorui in ~/project/src [11:42:26]$ tree|____project| |____bin| |____pkg| | |____darwin_amd64| | | |____handler.a| | | |____kill.a| | | |____pac.a| | | |____run.a| |____src| | |____handler| | | |____an.go| | | |____h.go| | |____main.go| | |____pac| | | |____pac.go| | |____run| | | |____main.go下面是指定的詳細代碼。# ruifengyun at xiaorui in ~/project/src [11:47:32]$ cat handler/an.gopackage handlerimport ( "fmt")func An() { Hot() fmt.Println("func An in An, file is an.go")}# ruifengyun at xiaorui in ~/project/src [11:47:37]$ cat handler/h.gopackage handlerimport ( "pac")func Hot() { pac.PacPrint("Hot from pac func , file is h.go")}# ruifengyun at xiaorui in ~/project/src [11:47:41]$ cat pac/pac.gopackage pacimport ( "fmt")func PacPrint(x string) { fmt.Println(x + "func PacPrint in pac file")}
| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
#http://xiaorui.cc #一定確保你的項目在GOPATH環境變數裡面,GOPATH可以用; 分好定義多個環境位置。$ echo $GOPATH/Users/ruifengyun/gg::/Users/ruifengyun/project #src一般是用來存放具體代碼的.# ruifengyun at xiaorui in ~/project/src [11:42:54]$ pwd/Users/ruifengyun/project/src #下面是項目的代碼結構. # ruifengyun at xiaorui in ~/project/src [11:42:26]$ tree|____project| |____bin| |____pkg| | |____darwin_amd64| | | |____handler.a| | | |____kill.a| | | |____pac.a| | | |____run.a| |____src| | |____handler| | | |____an.go| | | |____h.go| | |____main.go| | |____pac| | | |____pac.go| | |____run| | | |____main.go 下面是指定的詳細代碼。# ruifengyun at xiaorui in ~/project/src [11:47:32]$ cat handler/an.gopackage handler import ( "fmt") func An() { Hot() fmt.Println("func An in An, file is an.go") } # ruifengyun at xiaorui in ~/project/src [11:47:37]$ cat handler/h.gopackage handler import ( "pac") func Hot() { pac.PacPrint("Hot from pac func , file is h.go")} # ruifengyun at xiaorui in ~/project/src [11:47:41]$ cat pac/pac.gopackage pac import ( "fmt") func PacPrint(x string) { fmt.Println(x + "func PacPrint in pac file")} |
運行main之前,我們需要把上面的包一個個的go build, go install
Python#http://xiaorui.ccgo build pacgo install pacgo build handlergo install handler
| 1234567 |
#http://xiaorui.cc go build pacgo install pacgo build handlergo install handler |
我們build源碼後會發現在pkg裡多了*.a的檔案.
Python# ruifengyun at xiaorui in ~/project/src$ go run main.gohttp://xiaorui.ccfunc PacPrint in pac fileHot from pac func , file is h.gofunc PacPrint in pac fileHot from pac func , file is h.gofunc PacPrint in pac filefunc An in An, file is an.go
| 1234567 |
# ruifengyun at xiaorui in ~/project/src$ go run main.gohttp://xiaorui.ccfunc PacPrint in pac fileHot from pac func , file is h.gofunc PacPrint in pac fileHot from pac func , file is h.gofunc PacPrint in pac filefunc An in An, file is an.go |
關於Golang自訂包引入就說這麼多了,以後遇到新問題咱們再具體闡述一下。