Go mod 好菜系列 - 0x0B wire 这口依赖注入别硬吞

详细聊 wire 是来解决什么的、为什么 Go 项目会谈依赖注入、它适合什么规模,以及什么时候完全没必要把项目搞成装配迷宫。

只要项目开始长出 service、repository、client、config、logger 这些层次,迟早就会有人提出一个词:依赖注入。很多人一听到这个词就条件反射想到 Java 式的大框架,然后开始精神紧张。Go 里的 wire 比那种动态容器路线克制很多,但它依然值得你先想清楚:你到底需不需要它。

wire 是解决什么的

它不是运行时魔法容器,而是一个 编译期依赖注入代码生成工具。通俗说,就是你把“这些对象怎么拼起来”描述给它,它帮你生成那段装配代码。

为什么会出现这种需求

看一个很常见的项目装配过程:

cfg := LoadConfig()
logger := NewLogger(cfg)
db := NewDB(cfg)
repo := NewUserRepo(db)
svc := NewUserService(repo, logger)
handler := NewUserHandler(svc)

这段代码本身没什么错。但当项目组件越来越多、初始化依赖越来越深的时候,这段“组装流程”会越来越长,越来越散。wire 就是想把这件事收拢起来。

wire 的基本感觉

func InitializeUserHandler() (*UserHandler, error) {
    wire.Build(
        NewConfig,
        NewLogger,
        NewDB,
        NewUserRepo,
        NewUserService,
        NewUserHandler,
    )
    return nil, nil
}

然后 wire 会生成真正的初始化代码。也就是说,你不是把依赖关系藏进黑盒,而是把它显式描述出来,再交给工具展开。

它最大的优点是什么

  • 依赖关系显式
  • 编译期生成,不靠运行时反射
  • 大项目里装配层更整洁
  • 比手写一大堆工厂函数更容易统一管理

如果你项目真开始变复杂,这种“把装配层单独对待”的思路会越来越有价值。

但它不是所有项目的必需品

很重要的一句:如果你的项目现在只有三层、五个对象、十个构造函数,那大概率根本没必要上 wire。

很多人会在项目还没复杂到那个地步时,先引入一套依赖注入工具,结果最后最大的复杂度来自“我为了用工具而写了更多装配代码”。

wire 最适合什么场景

  • 服务组件很多
  • 初始化链条长
  • 多个模块共享一套依赖装配规则
  • 团队希望入口装配更统一

它更像是一种“项目规模长大以后降低混乱”的手段,不是小项目起手必备套餐。

小结

wire 这道菜很看项目体量:

  • 它解决的是依赖装配复杂度,不是业务复杂度
  • 编译期生成比运行时容器更克制
  • 项目足够大时很有帮助
  • 项目还小时,手写初始化往往更直接

下一篇我们讲 fx。它也是装配和生命周期这条线上的选手,但思路和 wire 不太一样。

Read more

Harness Engineering:从驾驭模型到构建 AI 工厂

Harness Engineering:从驾驭模型到构建 AI 工厂

2026 年,AI 编程工具的竞争焦点发生了根本性转变:决定 AI 助手好不好用的,不再是模型本身,而是包裹在模型外面的那层"Harness"。同一个模型,在不同的 Harness 下,性能差距可以达到 78% vs 42%。 这篇文章将带你深入了解 Harness Engineering——这个正在重新定义 AI 工程实践的新兴领域。 一、什么是 Harness Engineering? Harness 的字面意思是"马具/缰绳"——用来驾驭一匹强壮但不受控的马。在 AI 语境下,Harness 就是 LLM 之外的一切:工具定义、记忆系统、权限模型、反馈循环、文档规范、多

By Fuyu Jia

Claude Code CLI + Ralph:让 AI 自动完成大型编程任务的终极方案

TL;DR 当你的编程任务大到一个 AI 对话窗口装不下时,Ralph 会帮你把任务拆成小块,让 Claude Code CLI 一个接一个地自动完成——每轮都用全新的上下文窗口,不会越写越糊涂。 一、什么是 Ralph? Ralph 是一个开源项目(GitHub 16k+ Stars),基于 Geoffrey Huntley 提出的 "Ralph Pattern" 构建。它的核心理念很简单: 不要让 AI 在一个漫长的会话里做完所有事情,而是把大任务拆成小故事,每个故事用一个全新的 AI 实例来完成。 这解决了 AI 编程中最常见的痛点——上下文窗口耗尽。当对话越来越长,AI 的输出质量会明显下降。Ralph 通过「每轮一个新实例」的方式,

By Fuyu Jia