Go mod 相容性問題

pibigstar發表於2020-07-13

模組在 Go 中確定了一個重要的原則,即 匯入相容性規則

如果舊包和新包的匯入路徑相同,新包必須向後相容舊的包

所以一旦你依賴了某個包的兩個版本,那麼較低版本的將會被忽略。

舉個例子:

  • 專案 A 和 B 都 依賴 專案 C
  • 但專案 A 依賴的是專案 C 的 V2 版本,專案 B 依賴的是專案 C 的 V1 版本
  • 一旦專案 A 去引用專案 B,那麼專案 B 的 V1 版本將會被忽略

所以針對這個情況,依賴的專案C如果做升級,一定要做相容性升級,也就是你升級V2的時候不能把專案 C 的 V1 版本里面的東西刪掉

如果說真的想刪或者大改動怎麼辦?有兩種解決方案

改動小的推薦用方案1,改動比較大的話推薦用方案2

  1. 修改B專案,將其引用改為V2版本,並修改程式碼
  2. 可以修改專案 C 的 go.mod 檔案加一個 v2的字尾。

比如

module github.com/pibigstar/go-demo

go 1.14

你將其調整為

module github.com/pibigstar/go-demo/v2

go 1.14

這樣在 專案A中就可以引用v2版本,專案B中還可以繼續引用v1版本。使兩個版本可以共存。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章