最近在項(xiàng)目中用到了revel框架進(jìn)行g(shù)olang開發(fā),項(xiàng)目框架按照revel的標(biāo)準(zhǔn)定義進(jìn)行開發(fā),使用了vendor進(jìn)行依賴管理,結(jié)果在使用revel run編譯項(xiàng)目的時(shí)候,revel自動(dòng)生成的tmp/main.go中,依賴的revel路徑不對(duì),多了項(xiàng)目前綴,不是以github開始,導(dǎo)致不能正常編譯,無法啟動(dòng),而且這個(gè)main.go是自動(dòng)生成的,修改了每次還是會(huì)自動(dòng)生成。但發(fā)現(xiàn)同事的電腦上沒問題,他時(shí)linux系統(tǒng),估計(jì)和系統(tǒng)有關(guān),后面查看revel的源碼,果不其然,revel在自動(dòng)生成文件時(shí),對(duì)于vendor的依賴,沒有考慮到系統(tǒng)問題。
在revel/cmd/harness/reflect.go中,處理vendor中依賴的路徑時(shí),用的硬編碼/vendor/,太可怕了
if vendorIdx := strings.Index(root, "/vendor/") ; vendorIdx != -1 {
return filepath.ToSlash(root[vendorIdx+8:])
}
修改后再次instal revel,執(zhí)行就OK了,目前github上沒有兼容,后面有時(shí)間提個(gè)MR
if vendorIdx := strings.Index(root, filepath.FromSlash("/vendor/")) ; vendorIdx != -1 {
return filepath.ToSlash(root[vendorIdx+8:])
}