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

36 天前
 matrix1010

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

5860 次点击
所在节点    Go 编程语言
95 条回复
lifei6671
35 天前
@matrix1010 #5 建议你表达清楚你的需求,我看到你的这段文字也是感觉写的乱七八糟的。
Orenoid
35 天前
部分评论让我感觉相当迷惑,依赖注入啥时候和 Java 绑定上了,这不是一个很常用的设计思想吗?
用来解耦、提升应用可扩展性或者提升可测试性都是很好用的一个设计规范,甚至在业务层面都可以用。
matrix1010
35 天前
@Jinnrry 建议你去 https://www.zhihu.com/question/425602814/answer/2930203878 讨论 new 是不是合适,不要武断的说依赖注入==java 味。或者找个 grafana 的 service 比如 https://github.com/grafana/grafana/blob/main/pkg/services/guardian/accesscontrol_guardian.go 看看如果不用依赖注该怎么写怎么测
brookegas
35 天前
你说了我想说的,搞得我无话可说

点赞 👍
@Jinnrry
FarmerChillax
35 天前
纠正一个点,依赖注入个人认为是一种编程思想,它在 Go 内部包中都无处不在,你问的应该是「依赖注入框架」而不是「依赖注入」。
FarmerChillax
35 天前
rickiey
35 天前
我还真见过,github.com/filecoin-project/lotus ,你看看它的启动步骤 fx 注入的,当时看吐了
ryalu
35 天前
traefik 好像没用吧,不知道符不符合你所说的项目 https://github.com/traefik/traefik
matrix1010
35 天前
@FarmerChillax 我问的恰恰正是[依赖注入],假设 FooService 和 BarService 都依赖 BaseService ,但 NewFooService(...)和 NewBarService(...)都各自调用 NewBaseService()一遍而不是先 NewBaseService 再分别传入,这个应当不能说用了依赖注入。当然这一步可以用依赖注入框架自动完成
Immortal
35 天前
OP 有点听不进去...
brookegas
35 天前
Go 语言的官方教程里,根本没有提到「依赖注入」「编程思想」
等学会使用 Go 的接口编程,就会觉得这种语言自带的简单特性,能让你彻底远离屎山堆砌、臭不可闻的「依赖注入框架」
matrix1010
35 天前
lysShub
35 天前
@matrix1010 你说的这新建 Base 对象和复用 Base 对象是完全不同的,不能直接改成复用的吧
panda1001
35 天前
在这问就是个寂寞,自己动手
dependency injection language:Go
path:go.mod go.uber.org/fx
path:go.mod github.com/google/wire
path:go.mod github.com/samber/do
zjsxwc
35 天前
话说回来,go 语言因为有了每个文件的 init 方法,于是可以在 init 方法里对全局变量进行“黑魔法”,

于是对与类似 java 的依赖注入容器的需求就不大了,

其实 go 就是在 init 里干了 java 的依赖注入容器做的事情。

类似的 ruby 因为有了猴子钩子方法,也可以实现各种黑魔法,于是 ruby 对于类似 java 的依赖注入容器需求也不大,因为猴子方法也能实现各种黑魔法。
aloxaf
35 天前
@rickiey 竟然遇到矿友

给围观群众补个链接 https://github.com/filecoin-project/lotus/blob/master/node/builder_chain.go

看着挺优雅的,但是刚接触的时候真的难受,IDE 跳转完全是废的,根本搞不懂参数究竟是从哪里来的,究竟是哪一个
zjsxwc
35 天前
@zjsxwc
所以只有语言限制比较大的 java ,才会有纯血的依赖注入容器。

其他的比如 qt cpp 是通过 moc 编译器预处理来实现黑魔法注入。

而 php 、js 的早期的依赖注入比如 symfony1.x 、requirejs 都是通过绑定 字符串 与 对象 来实现的注入,现在确实 php 、js 抄了 java 的依赖注入容器方式。
aw2350
35 天前
用了所谓的 gowire 的代码,看起了十分恶心,到现在我都没有去 了解 go-wire 这个项目的具体用法。
BBCCBB
35 天前
依赖注入好东西, 但在 go 里用起来很麻烦..
tangzh55
35 天前
@Immortal 我也想说

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

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

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

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

© 2021 V2EX