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

3 天前
 inSpring
5958 次点击
所在节点    Go 编程语言
75 条回复
fffq
2 天前
不用,那可读性真差
SimbaPeng
2 天前
wire 、fx 都用过
CoderGeek
2 天前
我用的 uber 的 fx 感觉不多不少 凑合用
Jaeger
2 天前
有用 wire ,感觉还是很好用的,使用依赖注入模式会让代码清晰很多,使用 wire 自动生成注入代码可以节省很多工作量。
gl3081
2 天前
微服务使用 DI 框架还是非常方便的,可以灵活组合不同的服务:
参考: https://github.com/moke-game/platform(10+个游戏微服务)
gl3081
2 天前
sampeng
2 天前
用过一段时间。心智负担比较大。。。时间长了就给忘了。反正都是 ai 写。就其实还好,多一个 request 问罢了,适当的冗余是很方便查问题的。用的东西多了有时候不是什么好事
NX2023
2 天前
@matrix1010 #4 我之前会弄一个初始化函数替换所有全局变量例如 *gorm.DB ,其他的就直接 gomonkey 了😅
jollywang
2 天前
@BeautifulSoap 确实, 单测会有些蹩脚, 使用了条件编译来实现
但这个也是受限与小组内开发水平也是参次不齐的限制, java/go/python 都有涉及, 人均负责几个项目, 偶尔需要顶一下. 加之微服务隔离环境, 单个项目粒度控制的比较小, 倒也没那么重吧
NX2023
2 天前
我是会用的,当然用依赖注入不一定等于使用依赖注入框架

如果框架我用 https://github.com/samber/do

个人心理洁癖,感觉不依赖注入就跟私拉电线一样这里调一下那里调一下,看着乱心里不舒服(
依赖注入之后等于是把电线捆好放在这里,一个模块一个模块分割的很清晰

当然依赖注入的优点我也是很赞成的,包括容易写测试
haython
2 天前
有些人根本搞不明白依赖注入,所以就一刀切,干脆不学也不用
changz
2 天前
wire 加的复杂度在哪里?自己手写和生成区别不大。。。
koujianshusheng
2 天前
上个项目 kratos 里就集成了 wire
可以规范代码
刚开始上手有点难理解觉得
后面用起来就 ok 了
latifrons
2 天前
我在大量项目里都用了 https://github.com/golobby/container ,支持注解式注入和懒加载,很好用。

其实很多人开发 Go 并没有想清楚以下问题,直接短平快,但是大型项目里往往发现代码越写越乱:
1 ,程序初始化一次性任务、定时任务、长运行服务之间如何安排启动顺序;
2 ,命令行解析和配置文件层级及优先级关系
3 ,RPC/GRPC 服务业务报错/系统报错,错误代码处理
4 ,服务 SIGTERM 优雅退出处理
5 ,日志等级管理( DB ,rpc ,grpc ,resty )
6 ,单例管理(如*gorm.DB )

我也是迭代了很多项目,慢慢把这么多东西都抽离成了一个自用独立框架的
qq135449773
2 天前
当然会用。

对于 DI 这种需求可以说 wire 这种纯静态的方案做的恰到好处。

跑到 runtime 里到处 reflect 那样就有点得不偿失了。

本质上都是到处飞 `NewXXXXX` ,为何不用一种方法让这个过程更高效可读一点?
sotvokun
2 天前
一开始没准备用,但是写到各个组件之间的依赖太多了,手动初始化再在构造函数或者初始化结构体的时候传入也太麻烦了,干脆就直接用 wire 自动生成了。

虽然差别不大,但是生成出来的代码也不用在意人能不能读懂,能用就行,手写的话就要加入可读性维护的考虑了
zengxs
2 天前
用 uber/fx 。小项目用不用 DI 无所谓,但是项目比较大的情况下还是有必要用 DI 库的
HtPM
2 天前
主要还是钱没给够。我未必还要写单元测试?直接手动 request 一把梭哈
HypoChen
2 天前
有一个阶段喜欢用 DI 框架,大部分是突增烦恼。

事实上,只需要使用「将 Interface 定义在用的地方,而不是实现的地方」这个小技巧,就基本可以获得 DI 的好处了
devhxy
2 天前
推荐一个轻量级的:github.com/samber/do

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

https://yangjunhui.monster/t/1131027

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

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

© 2021 V2EX