做个调查:你们的 Go 项目中会用到依赖注入吗?比如用到如 wire、dig 之类的库?

135 天前
 inSpring
7786 次点击
所在节点    Go 编程语言
81 条回复
jollywang
135 天前
研究了这几个库, 对代码的结构组织结构影响还挺大的, 和 java 的 spring 完全不是一个概念
这么说吧, 不如就是一个全局的 Container struct, 里面定义了各种变量, 需要用的地方再引入, 这样对心智负担也较小, 更容易维护
gowk
135 天前
赞同楼上兄弟说的,感觉 Go 根本没必要用这些 DI 库,徒增复杂度
LitterGopher
135 天前
我不会主动使用,但是如果有一个对技术和 golang 半懂不懂的领导一定要求你要使用这个东西——即便他连这个 wire 的基础使用连一知半解都算不上——那我也没有办法。

我不赞同,但是如果你坚持那我就没必要坚持找不快。
matrix1010
135 天前
建议调查加上: 你们的 Go 项目写单元测试吗?写单元测试却没有使用依赖注入的情况下是如何 mock 各种依赖的
DonkeyKane
135 天前
小项目不用,大项目不得不用。
Ayanokouji
134 天前
用依赖注入,但不使用框架。
从这个项目学的思路 https://github.com/mikestefanello/pagoda
StarUDream
134 天前
#4 同意,我自己用依赖注入的时候也发现单元测试没法搞。
matrix1010
134 天前
框架以前我都推荐 Grafana ,但 Grafana 太复杂了而且有大量历史遗留代码,很多地方风格也不太统一。有兴趣的可以参考一下我最近的这个项目: https://github.com/Yiling-J/tablepilot. 在 Go 的基础上支持 CLI+WebUI+App, 同时写单元测试
BeautifulSoap
134 天前
对于说 go 用不到 di 的,我很好奇你们平时用的项目都小到各种依赖能手动注入的吗?

对于大点的项目,注入依赖项肯定需要 di 框架。我主要用 dig
BeautifulSoap
134 天前
@jollywang 全局的 Container struct (说白了就是全局变量存在那的一个 singleton 模式)的话,我就比较好奇,你这存在那的对象是在 init 阶段就 new 好还是等需要的时候再 new (即 lazy init )?后者的话那就必须要考虑线程安全问题。再一个既然是 singleton 了,如果我想要每次调用都生成一个全新的对象的话,是不是还得实现非 singleton 的功能。
那么这一套实现下来,在我看来不就是实现了半个 di 框架了吗
NotLongNil
134 天前
不用。90% 的项目其实都没必要依赖注入,即使是 java 也一样
MemoryCorner
134 天前
同好奇,如果不用依赖注入,你们单侧依赖怎么 mock ?
SethShi
134 天前
单元测试和依赖注入没什么关系吧,怎么楼上扯歪了,golang 这么多内置库没用依赖注入也不影响单元测试,一个包内的全局变量,然后包内测试刘 OK 克
dobelee
134 天前
@MemoryCorner interface+monkey
AEnjoyable
134 天前
我主导的一个大项目用到了自己写的 ioc ,通过依赖注入来适应不同的 tenants 。
单元测试覆盖所有 ioc 托管对象的接口,业务代码写完只需要去测试环境做一下集成测试就行。
虽然复杂度确实提升了,但后期维护+新增租户啥的都很方便,没啥负担
CLMan
134 天前
https://www.v2ex.com/t/1094915 半年经贴,回答者都是些熟面孔,回答也类似。
lanlanye
134 天前
你都用 Go 了……那你猜 Google 为什么要写 wire ?
fgwmlhdkkkw
134 天前
https://github.com/zzztttkkk/dic

我自己也弄了一个。
tairan2006
134 天前
不会,主要是不好用,徒增复杂度。
dwu8555
134 天前
那你为啥不用 java

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

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

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

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

© 2021 V2EX