也談Go語言程式碼封裝分發

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

Go語言目前(截至1.0.2版本)尚不支援直接連結.a檔案(這裡的.a檔案指的不是傳統靜態共用庫,而是對golang的非main包build後的產物)。這樣一來Go的第三方庫包或組織內部的公用程式碼程式庫包只能以源碼的形式分發了。

Go提供了get命令用於擷取他人分發的程式碼封裝。我們通過get命令既可以擷取一些知名代碼託管網站上的代碼,也可以擷取組織組建控制伺服器上的公用代碼。

Go get支援的託管網站包括github、google code、BitBucket以及Launchpad,針對這類情況,我們可以得到“特殊”文法的照顧:

go get github.com/bmizerany/assert
go get bitbucket.org/bmizerany/assert
go get code.google.com/p/assert
go get launchpad.net/assert

由於Go已經“內建”了github、google code等的版本控制工具類型,因此我們無需再做任何額外指定,只需用代碼的url(去掉http://)即可。

執行get後,代碼會被下載到GOPATH環境變數配置中的第一個路徑下的src目錄下面。例如:我們的GOPATH=/home/tonybai /goworkspace1:/home/tonybai/goworkspace2,執行go get github.com/bmizerany/assert後,我們將在/home/tonybai/goworkspace1下看到github.com 目錄,而assert包在本地的完整路徑就是/home/tonybai/goworkspace1/github.com/bmizerany /assert。這樣我們在代碼中直接import "github.com/bmizerany/assert"即可使用assert這個第三方包了。

在組織內部我們也會有自己的私人公用程式碼程式庫,一份程式碼程式庫可能被多重專案所使用。在每個項目中都儲存一份公用庫代碼顯然是不利於後續版本升級維護的,這樣就需要各個項目統一從同一個地方擷取或更新公用庫代碼。這種情況我們同樣可以用go get命令來做。

假設內部使用subversion作為版本控制工具,公用庫架設在10.10.12.13/svn0/share/golib。這時我們不能簡單地的通 過"go get 10.10.12.13/svn0/share/golib"來擷取到代碼,我們需要告訴get我們採用哪種版本控制工具,而這種資訊的傳遞是通過在庫名稱後面加上尾碼的方式進行的。比如:

go get "10.10.12.13/svn0/share/golib.svn"

這樣在/home/tonybai/goworkspace1下就會出現10.10.12.13/svn0/share/golib.svn目錄結構。我 們在代碼中可以直接import對應的包,比如import "10.10.12.13/svn0/share/golib.svn/assert"。

通過對get命令特性的瞭解,我們也可以確定分發的程式碼封裝到底應該如何組織。從上面的例子我們可以看出我們分發的程式碼封裝結構不需很複雜,直接在庫的 repository下建立包目錄即可,比如上面例子中庫repository為golib,assert就是直接建立在下面的目錄,同時也是包名。

go get可自動識別http_proxy環境變數,這樣Go也可以通過代理擷取外部程式碼封裝。

使用外部程式碼封裝的項目可以通過go get -u url來更新程式碼封裝版本為最新版本。

2012, bigwhite. 著作權.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.