大家有没有见过没有使用依赖注入的复杂 Go 开源项目

289 天前
 matrix1010

最近打算把公司的项目重构为使用依赖注入初始化所有服务(现在是每次需要某个依赖就内部 New 一个), 想找一些开源项目作为例子。但是简单找了找都是自动/手动进行依赖注入的,大家有没有见过 没有 使用依赖注入的:

8274 次点击
所在节点    Go 编程语言
97 条回复
changz
288 天前
@james122333 这个跟 init 有什么本质区别
wupher
288 天前
面向绩效编程哈
mrjnamei
288 天前
@matrix1010 AI 肯定没问题,我不太习惯用 AI ,会和我的 IDE 使用习惯冲突,代码在迭代和维护的过程需要不断的新增依赖才是最烦的,非常容易漏掉。
me1onsoda
288 天前
你到底想不想要使用依赖注入?
matrix1010
288 天前
@mrjnamei 这个恰好也是我正在试图避免的问题,初始化 service 肯定是有个 NewXxxService 或者 ProvideXxxService 之类的方法,如果单元测试初始化 service 时也使用这些方法就可以覆盖到。但如果 test 里手动构建 struct: testService := &UserServiceImpl{db: db, ...} 这样就检测不到了
qloog
288 天前
uncat
288 天前
当然是 miniflux/v2 啦。
james122333
288 天前
@changz

可以多个 init 函数可以四处飘 这个一个对象初始化自己的 意义不同 当然可以滥用 但问题清晰多了 可以避免翔
firstep
286 天前
@zjsxwc #36 ,实在看不惯 wire/fx 等用法。我也喜欢使用 init 特性来做初始化。
当然在测试时 init 顺序确实会有包间依赖顺序问题。所以造了个 initer 能够指定顺序,当然只是实验性的满足当前的项目场景。
rainbowStay
283 天前
@bthulu java 转 go 的新手提问下,为啥 go 不推崇依赖注入呀
rainbowStay
283 天前
@matrix1010 #19 意思是不是现用现 New 的都算依赖注入? func NewService(repo Repository) *Service {
return &Service{repo: repo}
}
rainbowStay
283 天前
@rainbowStay #91 抱歉,莫名奇妙发送出去了,想请问一下像上面这个写法也算依赖注入吗?
matrix1010
283 天前
@rainbowStay repo 不是你在 NewService 函数内部创建的,而是传入作为参数。完全符合依赖注入的定义
Kauruus
282 天前
@rainbowStay 不存在 “go 不推崇依赖注入” 的。
qloog
277 天前
使用 wire 的一个完整性 project: https://github.com/qloog/go-wire-example 示例说清楚了 wire 的大概用法
iamzcr
251 天前
@Jinnrry 点赞,也是说了我想说的,好好的 new 一个出来有多难。
chaleaochexist
40 天前
@Jinnrry
我们结论是,别总是用老思想写新代码,代码里面写个 new 有啥问题吗?
>>> 最主要的问题是 单元测试不好 mock
既不影响性能又不影响可读性,搞个依赖注入,查问题的时候一脸懵逼,这函数哪里调用的,那对象哪里创建的。
>>> 让 ide 帮助你. 接口直接跳转结构体. 但是如果有多个结构体都实现了这个接口, 确实是费劲.
为啥其他语言都没有大面积流行依赖注入这一套?
>>> 因为 python 的动态类型不需要注入, 也能实现单测和 mock. 另外, 就是 django 的那种另类注入 importlib.import("a.b.c.redis_client")

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1094915

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX