模組在 Go 中確定了一個重要的原則,即 匯入相容性規則
如果舊包和新包的匯入路徑相同,新包必須向後相容舊的包
所以一旦你依賴了某個包的兩個版本,那麼較低版本的將會被忽略。
舉個例子:
- 專案 A 和 B 都 依賴 專案 C
- 但專案 A 依賴的是專案 C 的 V2 版本,專案 B 依賴的是專案 C 的 V1 版本
- 一旦專案 A 去引用專案 B,那麼專案 B 的 V1 版本將會被忽略
所以針對這個情況,依賴的專案C如果做升級,一定要做相容性升級,也就是你升級V2的時候不能把專案 C 的 V1 版本里面的東西刪掉
如果說真的想刪或者大改動怎麼辦?有兩種解決方案
改動小的推薦用方案1,改動比較大的話推薦用方案2
- 修改B專案,將其引用改為V2版本,並修改程式碼
- 可以修改專案 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 協議》,轉載必須註明作者和本文連結