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

Go-brown-side.sh 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
govendor fetch github.com/joho/godotenv/autoload
上面指令只會抓 godotenv 內的 autoload package 原始碼,跟 autoload 無關的一律不抓,但是在 dep 只能能抓 godotenv 全部資料,不支援底下寫法,會直接報錯
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 啦。
  • 謝廣霖

    govender用很久都沒問題,推薦govendor

  • appleboy48

    感謝大大 推廣 govendor

  • voidint

    我在同时使用着govendor和gb,但是对于强迫症患者而言,还是希望用官方的工具链解决问题。

  • appleboy48

    當然啊,如果官方的軟體可以解決大部份問題,就轉過去啊 XD

  • jay

    關於”dep ensure 預設是抓 $GOPATH 的路徑”:
    dep init預設會先去掃 $GOPATH 底下是否存在所需要的 Package 原始碼,如果有,就是代表正在用的版號n,會去抓到原始碼到pkg/dep/sources,再copy版號n到 vendor
    目錄,這我覺得合理,如果直接幫你更新到最新反而會亂掉。
    原本沒有用dep管理的,做完上述之後,就可以把$GOPATH 下已進dep管理的 Package 砍掉了,然後更新專案下dep管的版號到最新再dep ensure。

  • appleboy48

    這樣對我這位開發者來說非常不方便,因為 gin framework 我常常改動,結果改爛了,我到其他 repo 內執行 dep init,結果 dep 幫我把爛掉的 code 複製到該 repo 內,害我找好久才知道 XDD