【Windows】【Golang】Go語言 套件管理工具之一 - Glide

世界上套件這~麼多種,數也數不清,
所以需要有管理套件的工具(為了管理套件方便而開發出來的某種套件)

在Go語言中 有不只一種管理套件工具,
Go glide是Go語言中 屬於較早期的管理套件之一(版本1.5)
而後來也推出了用 Go Module的方法來管理套件(版本1.11)
雖然都是套件管理,但兩者並非同樣的東西。

1.13版本之後預設會開啟 GoMod (Go Module)模式,
若要回到 Go glide (GOPATH模式) 則要設置環境變數
$ export GO111MODULE=off
若要回GoMod則是
$ export GO111MODULE=on



【Windows Glide安裝方法】

$ go get github.com/Masterminds/glide
或者直接從Github上下載Windows版本的壓縮檔,
解壓縮後,將 glide.exe 放入 C:\Go\bin (GOROOT)底下


如果是用JetBrains IDE,放的位置在
C:\Users\GJLMoTea\sdk\go1.15\bin
改自己的User、以及Go版本號碼

查看glide版本
$ glide --version

列出glide管理的套件

$ glide list

【glide使用教學】


glide 架構示意圖

- Hello (專案名稱)
  - glide.yaml
  - glide.lock
  - vendor (此專案所用到套件、函式庫的資料夾)
    - lib...  (哩哩扣扣一大堆...)
    - lib2... (有的沒的...)
  - main.go (自己寫的程式啦)


這個架構一點也不可怕、非常的簡單好理解,
裡面有 2個glide開頭的檔案
以及 vendor資料夾,此專案用到的所有套件,都打包放進vendor這裡了。

專案中引用到的套件,
會優先到vendor資料夾來尋找,找不到才會往GOROOT、GOPATH尋找套件。


所有Glide都是靠glide.yaml來運作的。

glide.yaml 通常會放在專案目錄底下,而專案目錄會放在src/(github/)底下

glide.yaml就只是一個設定檔,用的是yaml格式


一開始當然要創建glide.yaml檔
$ glide init 
$ glide create 
或者 要自己vim glide.yaml來新增也行 

【yaml的格式】


yaml的格式如下

package: github.com/gjlmotea/hello
owners:
  - name: GJLMoTea
    email: gjlmotea@gmail.com
import:
  - package: github.com/gocolly/colly
    version: ~1.2.0

yaml 常見的縮排方式為 "空白x2, -字號, 空白x1" 或 "-字號, 空白x1"
第一行 package 放的是 在自己寫的程式裡面所用到的別人的套件,
為了要指定套件,格式是: github.com / 作者名稱 / 專案名稱

而在這個範例中 import 了colly這個Github上的套件
並且指定版本(沒有指定版本的話,下載時會抓最新版本)

版本Version中的版本號要到github上查看、指定
可以指定特定版本、也可以透過>< 符號來指定版本範圍
~ 代表小升級,如 2.1.0 => 2.1.6 尾數號碼版本 基本上只會做bug修改、有越改越穩定的趨勢
^ 代表大升版,如 2.1.0 => 2.5.1 中間號碼版本 可能會稍微做一些功能上的變動,影響到程式運作

更多詳細請見版本說明




【下載Vendor】


今天專案裡面只有 main.goglide.yaml 兩個檔案

沒有vendor套件包,(因為用到別人專案的東西)沒辦法執行程式,
該怎麼辦呢?

$ glide up
這指令會依照 glide.yaml 的配置來下載套件
因為是up (upgrade),會依照配置來升級、升版
載完後就會看到 vendor資料夾 以及glide.lock 檔案



而這個產出的 glide.lock 在做什麼?

可以看一下他裡面有版本、跟經過hash的亂碼
意思是記住你當前使用的套ㄧ件的版本

當有 glide.lock 檔時,輸入
$ glide install
不會自動升版,會依照.lock檔 鎖定、指定的版本下載到vendor資料夾裡





【使用glide、vendor的優缺點】

上傳到github的時候,因為怕上傳的檔案太大、太肥,
可以在.gitignore檔案裡加入 /vendor
來防止所用到的套件也被傳上去、無謂的傳輸。


等有人要下載、使用你的專案時,
只要輸入 $ glide up$ glide install
來下載依賴套件,便可順利執行專案程式。

但vendor也造成一個問題,
我電腦裡的 HelloWorld專案 使用到 gin 這個套件,
另一隻 MyHomework專案 也使用到 gin 這個套件,
因不同專案沒辦法共用vendor,
等於同樣的 gin套件在我電腦裡占了兩份空間。


優點:只上傳自己的程式碼、以及glide設定檔,便可指定依賴版本,非常減小輕便
缺點:多個專案底下的vendor互不共用,易佔儲存空間



[ERROR] Failed to retrieve a list of dependencies: Error resolving imports
有時會出現如上的問題,沒辦法正常的安裝套件
先檢查glide.yaml檔有沒有寫好、是否格式錯誤或單字拼錯造成套件無法正常安裝,
是否將版本 多打或少打英文字母。
另外一些套件的新版本 似乎只支持 go module的 $ go get 的方法才能正常安裝...

再沒辦法的話,通常會清除快取、重新再下載一次

$ glide cc清除 C:\Users\GJLMoTea\.glide\cache\src 底下的所有檔案

$ rm -rf vendor