Go语言 如何避免模块中的所有包都有依赖项?

utugiqy6  于 2023-02-06  发布在  Go
关注(0)|答案(1)|浏览(99)

来自.NET背景,我目前正尝试将我的第一个go项目调整为更典型的项目结构(类似于this),我不明白的是,如何避免依赖项意外地潜入不属于它们的包中。
假设我有一个由两部分组成的项目,一个名为foo的应用程序和一个模型。

  • 我的模型具有很少的依赖项
  • foo应用程序可能依赖于用于HTTP、日志记录、度量等的库。

该项目可能如下所示:

├── go.mod
├── go.sum
├── model
│   ├── person.go
│   └── address.go
├── cmd
│   └── runfoo
│       └── main.go
└── foolib
    └── applicationlogic.go

但是因为模块文件在根目录下,go get github.com/httplib将使httplib也可用于模型。

  • 这非常容易(尤其是使用VSCode自动导入等),有时候很容易在模型中要求httplib,即使它确实不属于那里。
  • 查看go.mod,我无法确定哪些依赖项用于模型,哪些用于应用程序。

现在,我可以使用非常细粒度的模块,并添加一个go.work文件用于开发,但这似乎很难维护(并且与引用结构不一致)。

如何避免使依赖项可用于所有软件包?这样做是否可取?

fzwojiic

fzwojiic1#

如何避免使依赖项可用于所有软件包[?]
您不能(使用一个模块)。
[...]这样做是否可取?
不,绝对不行。
您看到的"缺点"根本没有问题,在实践中也不会导致任何问题。

相关问题