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