所以需要有管理套件的工具(為了管理套件方便而開發出來的某種套件)
在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尋找套件。
專案中引用到的套件,
會優先到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.go 跟 glide.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