我在使用供應商目錄中的 google.golang.org/grpc 時遇到問題,并收到以下錯誤cannot use &metadata.HeaderMD (type *"google.golang.org/grpc/metadata".MD) as type *"project1/vendor/google.golang.org/grpc/metadata".MD in argument to grpc.Header盡管我使用的是從 gopath 復制的軟件包的必要版本,但我收到了錯誤。但是,當我從供應商中刪除 golang.google.org/grpc 文件夾時,我的項目從 gopath 獲取依賴項,并且它工作正常,盡管一個 gopath 是我在供應商目錄中的副本,并且供應商目錄中的所有其他庫都工作正常除了grpc。
1 回答

慕桂英4014372
TA貢獻1871條經驗 獲得超13個贊
當您創建 時project1/vendor/google.golang.org/grpc
,這意味著對于 下的包project1/...
, 的導入google.golang.org/gprc/...
將透明地重新映射到供應商版本。
外部的任何軟件包project1
將繼續導入非供應的google.golang.org/grpc/...
軟件包。雖然供應商的包可能是上游的副本,但 Go 將它們視為獨立的包。因此它們包含的類型并不等效。
最有可能發生的情況是,您的非供應依賴項之一導入了 grpc 包并在其公共 API 中使用其類型。當您使用來自 的 API 時project1
,您將獲得上游類型,該類型無法使用供應商類型分配給變量。
此問題有兩種可能的解決方案:
供應所有使用您已供應的依賴項。
如果您使用的 Go >= 1.11,請切換到較新的 Go 模塊構建系統。這將使您能夠繼續控制何時升級依賴項,而不會因為
project1/vendor/...
樹而混淆類型系統。
- 1 回答
- 0 關注
- 140 瀏覽
添加回答
舉報
0/150
提交
取消