關於golang package自訂包結構

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

我想說的是,好傢夥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自訂包引入就說這麼多了,以後遇到新問題咱們再具體闡述一下。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.