Golang Go语言上的 DI 有什么比较好的解决方案

发布于 1周前 作者 songsunli 来自 Go语言

Golang Go语言上的 DI 有什么比较好的解决方案

如题^ 目前看过 dig 和 wire,有人用过吗?有什么坑分享一下。

19 回复

GoCD

更多关于Golang Go语言上的 DI 有什么比较好的解决方案的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


直接写依赖注入不好吗 di 这个缩写也太模糊了



还好我回复的慢,差点把 DI 当成 CI 了。

facebook 也有个 inject 库

手动构造函数注入不用库

用 go 去用依赖注入?问号脸。。。

选择用 go 就是为了追求更高的性能。所以不用依赖注入。

dig 是用反射实现的,其实还行

wire 是代码生成的,如果不是很复杂的项目,代码生成不如手工写了

我也想了一下 要不是提到了 wire 我也以为是 ci 的什么变种

有没有基于 xml 文件的注入?

wire 的方式看起来不爽啊

建议换成 Java

还以为在说数据智能╮( ̄▽ ̄"")╭

依赖注入和性能有什么关系?

依赖注入有啥影响性能的……大部分启动时候扫一下就行了

官方博客都教你用 wire,有什么问题?

go 的依赖注入( dig )用的反射实现的,反射性能不佳。
当然,你要是能做到只在程序初始加载时做一次注入,那就无所谓了。

出门左转是 java … go 需要啥依赖注入…

如果不用 xml 配置注入的话,用注解注入我也喜欢。

发现这个 facebook 的项目,它通过注解来注入比 wire 那种手动写一堆 NewXXXXX 函数来注入更自然:

https://github.com/facebookgo/inject

在Golang(Go语言)中,依赖注入(DI)是一种重要的设计模式,用于实现代码的解耦和增强模块间的灵活性。针对Go语言上的DI,以下是一些比较好的解决方案:

  1. 手动注入

    • 适用于小型项目或模块间依赖关系简单的情况。
    • 通过构造函数、方法参数等方式显式传递依赖。
  2. 使用第三方库

    • Wire:由Google开源的依赖注入框架,通过代码生成的方式提供高效的依赖注入解决方案。Wire通过编写注入代码模板,在编译时生成具体的依赖注入逻辑,从而避免了运行时的性能开销。
    • Uber的Dig:一个轻量级的依赖注入容器,支持反射和代码生成两种方式,提供了灵活的依赖注入和解析功能。
    • Facebook的Inject:虽然不如Wire和Dig那样流行,但也是一个可选的依赖注入库。
  3. 使用接口和服务容器

    • 定义接口来抽象依赖关系,然后通过服务容器(如自定义的结构体或第三方库提供的容器)来管理和注入这些依赖。
  4. 利用Go的模块系统

    • Go的模块系统(go mod)虽然主要用于依赖管理,但也可以在一定程度上辅助实现DI,通过模块间的显式依赖关系来组织代码。

综上所述,选择哪种DI解决方案取决于项目的规模、复杂度以及开发团队的具体需求。

回到顶部