vendor踩坑筆記:
接過公司里面X平台golang部分的后端后,需要新添加一個業務功能,美滋滋~ 拿過項目一頓寫之后后遇到事了。
報錯的描述如下:
報錯的大意說:方法的入參類型不匹配,我們不能把 Assignment2/vendor/github.com/...
當作github.com/...
類型來使用。
出現的這個錯誤的原因就項目中使用的 beego的Controller使用了vendor進行管理,於是在這個包前多了個前綴 項目名/vendor/xxx
。但是呢,這個函數需要的是純粹的beego的controller,加上這個前綴之后反到是不認識了。於是就出現了上面的錯誤。
查閱資料后了解:vendor是在GOPATH的管理之下的,大白話說:如果我們的項目在GOPATH目錄下,那么項目中需要的依賴信息優先從vendor中獲取。你看,我上面的報錯就屬於這個情況,我以為我在使用 github/astaxie/beego/controller , 而實際優先導入了 項目名/vendor/github/astaxie/beego/controller
當時我是如何解決的呢?
不是說優先導入vendor中的代碼嗎?好,我把你刪除,你不就使用我本地的依賴了?(純潔的微笑~)
事實證明,確實如此,刪除vendor中的依賴后,一切歸於平靜,繼續開發~
但是我提交代碼讓組里的大佬CR時,大佬發現vendor被我改了~~~,這才知道,項目之所以使用vendor管理項目就是為了讓項目中的依賴可以跟着項目遷移,這樣部署項目時不再去很多不同的地方拉取依賴,因為依賴都在項目里面。
所以刪除vendor中的依賴並不是萬全之策,可以刪掉現在的vendor,重新用vendor初始化一下,讓項目中的依賴重新讓vendor管理。
# 下載govendor
go get -u -v github.com/kardianos/govendor
# 在當前目錄中執行如下命令進行初始化,將依賴加入vendor統一管理
govendor init
govendor add +e