golang包管理工具glide簡介
golang包管理工具glide簡介
前言
golang是一個十分有趣,簡潔而有力的開發語言,用來開發並發/並行程序是一件很愉快的事情。在這里我感受到了其中一些好處:
- 沒有少了許多代碼格式風格的爭論,強制統一的風格多好;
- 編譯速度超快,再也不用等待許久,才能編譯完工程(測試驅動開發自然更爽);
- 也不會出現同一個項目組中的人,在使用同一個語言的不同子集。但這種情況不論是在C#還是在Java的世界里,都還是普遍存在的;
- 輕松跨平台(當然Java做得不錯,C#/.net還是努力中...)
- 這是一門非常簡潔、簡單、清晰的編程語言(關鍵字好少啊)
- 包依賴處理得很有趣;
- 錯誤處理機制很有趣,個人覺得比C#/Java的異常處理機制更方便,也更合理些;
- 對面向對象編程很有趣,非侵入性的接口實現方式,太贊了。
- 用組合而不是繼承
有些東西沒有,比如模板,這個東西有一大片爭論,官方也有明確的回應。是啊,為什么一定要模板呢?非要不可嗎?這么關鍵嗎?如果非要不可,是不是go並不是這個環境下的最佳選擇呢。
還有一個問題的是包管理,並沒有官方最佳管理方案,在go的世界里存在大量的自制解決方案。go語言的包是沒有中央庫統一管理的,通過使用go get命令從遠程代碼庫(github.com,goolge code 等)拉取,直接跳過中央版本庫的約束,讓代碼的拉取直接基於源代碼版本控制庫,開發者間的協同直接依賴於源代碼的版本控制。直接去除了庫版本的概念。沒有明顯的包版本標識,感覺還是有點不適應,官方的建議是把外部依賴的代碼全部復制到自己可控的源代碼庫中,進行同意管理。從而做到對依賴包的可控管理。
1.5版本的vendor目錄特性后,官方wiki推薦了多種支持這種特性的包管理工具如:Godep、gv、gvt、glide、Govendor等。我比較喜歡glide。此外,作為程序員FQ似乎是必備技能,翻得一手好牆,才能跟得上步伐,才有收起刀落的手感,怎一個爽字了得。別問我怎么FQ,找度娘,她知道。
glide
glide是Go的包管理工具。支持語義化版本,支持Git、Svn等,支持Go工具鏈,支持vendor目錄,支持從Godep、GB、GPM、Gom倒入,支持私有的Repos和Forks。
使用glide管理的工程目錄結構如下:
- $GOPATH/src/myProject (Your project)
|
|-- glide.yaml | |-- glide.lock | |-- main.go (Your main go code can live here) | |-- mySubpackage (You can create your own subpackages, too) | | | |-- foo.go | |-- vendor |-- github.com | |-- Masterminds | |-- ... etc.
安裝
$ curl https://glide.sh/get | sh
初始化
$ glide init
初始化,glide掃描代碼目錄,創建一個glide.yaml文件,文件中記錄了所有的依賴
編輯配置
$ edit glide.yaml
通過修改glide.yaml文件,可以添加版本信息等,這一步不是必須的。
解析下載包依賴
$ glide update
或者
$ glide up
下載和更新glide.yaml中列出的所有依賴包,並將它們放到vendor目錄下。glide同時也遞歸獲取依賴包需要的任何依賴項包括配置文件中定義的依賴項目。glide遞歸獲取依賴,可以識別Glide、Godep、gb、gom和GPM管理的項目。
當依賴被制定到特定的版本時,名為glide.lock的文件會被創建或者更新。例如,如果在glide.yaml中一個版本被指定在一個范圍內(如:^1.2.3),那么glide將在glide.yaml中設定一個特定提交ID(commit id)。如此,將允許重復安裝(見 glide install命令)。
從獲取的依賴包中移除嵌套的vendor/目錄可以使用-v標記。
安裝特定版本
當需要從glide.lock文件中安裝制定版本的包是,可以使用install命令:
glide install
該命令將會讀取glide.lock文件,當glide.lock文件和glide.yaml不同步時,如glide.yaml發生改變,glide將會提供一個警告。運行glide up命令更新依賴樹時,將會重建glide.lock文件。
查看glide.yaml中依賴名稱
$ glide name
查看依賴列表
$ glide list
查看幫助
$ glide help
參看glide版本信息
$ glide --version