来自.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
文件用于开发,但这似乎很难维护(并且与引用结构不一致)。
如何避免使依赖项可用于所有软件包?这样做是否可取?
1条答案
按热度按时间fzwojiic1#
如何避免使依赖项可用于所有软件包[?]
您不能(使用一个模块)。
[...]这样做是否可取?
不,绝对不行。
您看到的"缺点"根本没有问题,在实践中也不会导致任何问题。