0

我正在为多个外部 Go 依赖项制作适配器。一个根包在example.com/api. 其他子包位于example.com/api/adapters/<adapter-name>- 每个适配器都具有实现api包接口的结构,并具有外部库的外部依赖项。

在此处输入图像描述

它应该以这种方式使用:某些库(图中的“lib”)导入example.com/api并仅使用此包中的接口。一些最终应用程序(图中的“app”)使用“lib”包并依赖于example.com/api/adapters/<adapter-name>.

我负责 API 和适配器包(图中的虚线矩形)。所以我尝试以这种方式构建项目:

.
├── adapters
│   └── adapter1
│   │   └── adapter.go
│   └── adapter2
│   │   └── adapter.go
│   └── adapter3
│       └── adapter.go
├── go.mod
├── go.sum
└── api.go

但这里的问题是,当我尝试制作示例“lib”和“app”模块并在“app”中使用“adapter1”时,该go.sum文件包含“app”中未使用的“adapter2”和“adapter3”的所有依赖项; 除了“app”定义了不必要的依赖之外,如果“app”想要使用“adapter-1”并使用与adapter-2和adapter-3相同的外部依赖,但版本不同,则可能会出现真正的问题。

我正在考虑将“适配器-{n}”包移动到单独的存储库并拥有包:

  • example.com/api
  • example.com/api-adapter-1
  • example.com/api-adapter-2
  • example.com/api-adapter-3

但这看起来像是开销,因为一些适配器非常小,可以放在一个文件中。

是否可以排除 go 模块中未使用的传递依赖项并将所有这些包保存在同一个模块/存储库中?

4

0 回答 0