Golang 套件管理工具 Glide

如同 nodejs 的 npm , Go 也擁有自己的套件管理工具 Glide,這裡介紹一下的使用方式

glide.png

安裝方式 (window 10)

下載取得專案

1
go get github.com/Masterminds/glide

進入 GOPATH\src\github.com\Masterminds\glide 資料夾

編譯執行檔

1
go build glide.go

執行檔移置 bin 資料夾

1
go install

如果環境變數有設定go/bin就可以直接執行

建立一個新專案

建立glide.yaml,這是 glide 的專案設定檔,類似 npm 的 package.json

1
glide init

新增第三方套件

假設我們要新增 github.com/foo/bar 套件 (後面可以接版號)

1
glide get github.com/foo/bar#^1.2.3

glide 會幫你在專案中新增一個 vendor 資料夾,並把相依的套件放在裡面,之後執行go時,會先尋找 vendor 資料夾有無套件,如果沒有才會去找 $GOPATH

下載專案後安裝相依套件

1
glide install

如果專案內沒有 glide.lock 檔案,當您執行 glide install 後,其實系統會先執行 glide up 產生 glide.lock 檔案

window10 安裝問題處理

如果出現錯誤

1
[ERROR] Unable to export dependencies to vendor directory: Error moving files: exit status 1. output: Access is denied. 0 dir(s) moved.

這是一個 window10 的 bug ,請去修改 github.com/Masterminds/glide/path/winbug.go 76 行 move 改 xcopy

1
2
3
4
5
6
7
8
9
// Handking windows cases first
if runtime.GOOS == "windows" {
msg.Debug("Detected Windows. Moving files using windows command")
// cmd := exec.Command("cmd.exe", "/c", "move", o, n) //move改xcopy
cmd := exec.Command("cmd.exe", "/c", "xcopy /s/y", o, n+"\\")
output, err := cmd.CombinedOutput()
if err != nil {
return fmt.Errorf("Error moving files: %s. output: %s", err, output)
}

修改後重新編譯一次可

其他 Glide 參數

  • --all-dependencies 下載相依套件全部的 dependencies
  • -s 下載後刪除 .git 目錄
  • -v 移除 Godeps/_workspace 等相關目錄