golang 依賴管理
依賴管理是一個語言非常重要的特性,很大程度上決定著一個語言的流行程度,流行的語言大多都有非常成熟的依賴管理工具,java 的 maven 和 gradle,javascript 的 npm,python 的 pip,這些工具極大地降低了我們使用第三方庫的成本,提高了生產效率,而 c++ 比較奇葩,並沒有這樣統一的依賴管理工具,大公司好一點,有專門的團隊去做這樣的工具解決依賴的問題,小公司就只能自己把原始碼拉下來,放到固定的目錄,然後編譯成二進位制,運氣不好的話,還要自己解決各種相容性的問題,如果有版本更新,這個過程還得重複一遍,第三方庫的使用和維護成本之高,讓人簡直就想放棄……
Golang 是自帶依賴管理工具的,直接 go get <packages>
就可以把依賴拉下來,但是這種方式有個缺陷,沒有版本控制,你每次拉下來的 package
都是 master
分支上的版本,這樣是很危險的,原始碼更新可能會有一些對外介面上面的調整,這些調整很有可能就導致你的程式編譯通不過,而更致命的是,新的程式碼引入了一些新的 bug 或者介面語義上的變化會導致你的程式崩潰,所以早期的 gopher 開發了另一個依賴管理工具 godep
解決了版本管理的問題,最近,golang 官方也在開發一個新的依賴管理工具 dep
,但今天我給大家推薦的是 glide
這款工具,和其他工具相比呢,這款工具支援更多的特性,包括支援依賴的自動分析,指定版本範圍,依賴清理等等,而且使用起來也比較簡單。這裡有一些工具的對比:https://github.com/Masterminds/glide/wiki/Go-Package-Manager-Comparison
下面我給大家簡單介紹一下 glide
在實際專案中的使用
glide使用
安裝
Linux
curl https://glide.sh/get | sh
Mac
brew install glide
初始化
glide init
這個命令會自動分析你程式碼裡面的依賴,然後建立一個 glide.yaml
來描述你當前專案的依賴,生成的這個檔案是可以手動編輯的,可以手動修改一些版本之類的資訊
提醒一下,這個操作必須在 $GOPATH/src/
的子目錄下面,這個和 golang 本身的包管理機制有關,如果沒有設定 $GOPATH
,記得設定一下 export GOPATH=<directory>
依賴下載
glide update
這個命令會下載 glide.yaml
裡面的依賴庫,並且同樣會分析並下載依賴庫依賴的其他第三方庫,下載的依賴會放到與 glide.yaml
同級的 vendor
目錄,同時還會生成一個 glide.lock
檔案,這個檔案裡面描述了當前依賴的版本資訊,不要手工編輯這個檔案
如果你在中國,這個步驟裡面可能會碰到有些 gopkg
的庫拉不下來,也不知道為啥要把這個也禁了……如果你碰到這個問題,你可以手動把這些庫下載到 ${GOROOT}/src/golang.org/x
下面
git clone https://github.com/golang/crypto.git
git clone https://github.com/golang/sys.git
git clone https://github.com/golang/sync.git
git clone https://github.com/golang/text.git
git clone https://github.com/golang/net.git
新增依賴
glide get --all-dependencies github.com/foo/bar
也可以指定版本
glide get --all-dependencies github.com/foo/bar#^1.2.3
除了 github
上的依賴,也可以是其他的平臺,比如 gitee
,或者自己公司搭建的 gitlab,只要有許可權就可以,還有一點需要注意,版本必須是三位數字的版本號,否則可能識別不了
安裝依賴
glide install
這個命令是在一個已經使用 glide 管理依賴的專案裡,需要在新環境下重新安裝依賴使用的,這個命令會按照 glide.lock
的資訊,把所有的依賴拉取到本地,和 glide update
不同的是,glide update
會來去最新的版本,並且會修改 glide.lock
,而 glide install
只下載之前的依賴
參考連結
glide github: https://github.com/Masterminds/glide glide 官網: https://glide.sh/ go依賴包管理工具對比: https://ieevee.com/tech/2017/07/10/go-import.html
轉載請註明出處 本文連結:http://hatlonely.github.io/2018/01/27/golang依賴管理/
相關文章
- 使用godep管理Golang專案依賴Golang
- 使用govendor管理Golang專案依賴Golang
- 依賴管理和依賴範圍
- golang 快速入門 [7.1]-專案與依賴管理-gopathGolang
- Maven依賴管理:控制依賴的傳遞Maven
- govendor依賴包管理Go
- 探索 JavaScript 中的依賴管理及迴圈依賴JavaScript
- PHP依賴管理ComposerPHP
- Flutter 中的依賴管理Flutter
- Maven依賴管理系統Maven
- Golang 依賴注入設計哲學|12.6K 🌟 的依賴注入庫 wireGolang依賴注入
- 關於Golang中的依賴注入實現Golang依賴注入
- nodejs 中的依賴管理NodeJS
- 開源依賴項管理指南
- PHP之依賴管理composerPHP
- Android 依賴管理簡介Android
- Maven最佳實踐:管理依賴Maven
- npm如何管理依賴包的版本NPM
- Composer -- PHP依賴管理的用法PHP
- 官方依賴管理工具:dep
- Maven的頂級功能——依賴管理Maven
- 依賴
- 依賴倒置(DIP)與依賴注入(DI)依賴注入
- 搜車 React Native 依賴管理方案React Native
- OSGI中的service依賴關係管理
- Gradle入門系列(3):依賴管理Gradle
- 管理工作中的依賴
- Maven依賴範圍及依賴傳遞Maven
- 依賴管理利器---Spring IO Platform解決Spring組合依賴問題實戰SpringPlatform
- SpringBoot2.x的依賴管理Spring Boot
- 利用 uber-go/dig 庫管理依賴Go
- 淺聊前端依賴管理及優化(上)前端優化
- Maven快速入門(五)Maven的依賴管理Maven
- 如何對 Android 庫進行依賴管理?Android
- bower解決js的依賴管理備記JS
- PHP的依賴管理工具-ComposerPHP
- AI依賴算力,而算力依賴能源AI
- 專案管理中,如何識別和管理依賴關係?專案管理