Go 語言官方推出的 dep 使用心得

Go 語言團隊在去年開始開發 Dependency Management Tool 稱作 dep,並且預計明年 2018 推出 1.10 Go 版本時內建,詳細可以參考官方的 roadmap,強者我朋友寫了一篇使用教學,有興趣的朋友可以參考看看,但是本篇會講幾點我目前不打算用 dep 的原因。

dep ensure 預設是抓 $GOPATH 的路徑

dep init 或 dep ensure 預設會先去掃 $GOPATH 底下是否存在您所需要的 Package 原始碼,如果有,預設就會去抓到 vendor 目錄,但是這點對開發者很困擾,在 $GOPATH 底下的專案都不是最新的,有時候自己還會去修改自己開發的 Package,這樣造成開發者還要下一次指令去更新 vendor 套件 (請加上 -update 參數)。

不支援抓 sub package.

其他 Dependency tool 幾乎都有支援抓 sub package,像是 govendorglide

1
govendor fetch github.com/joho/godotenv/autoload

上面指令只會抓 godotenv 內的 autoload package 原始碼,跟 autoload 無關的一律不抓,但是在 dep 只能能抓 godotenv 全部資料,不支援底下寫法,會直接報錯

1
dep ensure github.com/joho/godotenv/autoload

dep 預設抓不相關的檔案到 vendor

dep 預設會抓非 .go 或者是不相關的檔案到 vendor 目錄,像是 .travis.yml 另外也把 _test.go 也一起抓進來,造成整個 venodr 有點肥。相對像是 govendor 只會抓專案會用到的 *.goLicense 檔案,所以在 vendor 目錄底下相對看起來蠻清楚的。

結論

綜合上面三點,我個人不推薦現在使用 dep,非常不穩定,未來官方還會修正 .json 或 .lock 檔案格式,現在要決定的話,我會等到年底或者是明年初再開始使用,大部份的 Open Source 專案還是都是使用 govendor 或 glide …等相對穩定的工具。我個人推薦 govendor 啦。


See also