NVIDIA开源的Go依赖注入神器:gontainer,真香!

简介: gontainer 是 NVIDIA 开源的零依赖 Go DI 容器,基于泛型+反射实现函数签名自动注入,无需代码生成。支持懒加载、生命周期管理、可选/批量依赖,轻量易用,适合中小型项目,让 Go 依赖注入回归简洁本质。(239字)

推荐阅读

Gin 1.12新版本发布:这个新特性让开发者少写一半代码!
最新我用AI开发了自己的第一个博客网站:https://golangai.site ,可前往阅读公众号的文章。

写Go还在手动NewXXX(db, logger, config)?NVIDIA悄悄开源了这个零依赖的DI容器,看完直呼:早该这样了!


🔍 gontainer 是什么?

一句话:用函数签名自动注入依赖的轻量级容器,零外部依赖、零代码生成,纯靠 Go 泛型 + 反射实现。

image.png

// 以前:手动组装,写到怀疑人生
svc := NewUserService(
    NewDatabase(NewConfig()),
    NewLogger(),
    NewCache(),
)

// 现在:声明依赖,自动注入✨
gontainer.NewFactory(func(db *Database, log *Logger) *UserService {
   
    return &UserService{
   db: db, log: log}
})

⚡ 核心亮点:简单到离谱

特性 说明 爽点
🎯 自动注入 按函数参数类型匹配依赖 不用写wire.go,不用跑go generate
🚀 懒加载 服务真正用到时才创建 启动快,内存省
🔄 生命周期 自动反向清理资源 defer级体验,容器级管理
🧩 零依赖 纯标准库+泛型 go.mod清爽到哭

💡 进阶玩法:不止于"自动注入"

1️⃣ 可选依赖?安排!

gontainer.NewFactory(func(metrics gontainer.Optional[*Metrics]) *API {
   
    if m := metrics.Get(); m != nil {
   
        api.WithMetrics(m) // 有就用,没有也不崩
    }
    return api
})

适合插件化架构:核心功能不依赖可选模块,解耦满分💯

2️⃣ 批量注入接口实现?也支持!

type Middleware interface {
    Process(http.Handler) http.Handler }

gontainer.NewFactory(func(mws gontainer.Multiple[Middleware]) *Router {
   
    for _, mw := range mws {
     // 所有实现Middleware的自动收集
        router.Use(mw)
    }
    return router
})

中间件、钩子、处理器…批量注册,优雅到像写配置🎨


🤔 个人锐评:它适合你吗?

推荐场景

  • 中小型微服务/CLI工具,追求启动速度
  • 团队不想维护复杂DI框架(比如google/wire
  • 希望依赖关系"看得见摸得着",调试友好

谨慎使用

  • 超大型单体应用(可能需要更细粒度的生命周期控制)
  • 需要循环依赖的场景(设计上就该避免🙅)

💬 深度看法:gontainer 的哲学是"约定优于配置"——你用函数签名声明依赖,它用反射帮你连线。这种"显式声明+隐式组装"的平衡,恰恰是Go语言"简单但不简陋"精神的体现。


🎯 30秒上手示例

package main

import "github.com/NVIDIA/gontainer/v2"

type DB struct{
    url string }
type Service struct{
    db *DB }

func main() {
   
    gontainer.Run(
        gontainer.NewFactory(func() *DB {
    
            return &DB{
   url: "postgres://local"} 
        }),
        gontainer.NewFactory(func(db *DB) *Service {
    
            return &Service{
   db: db}  // db自动注入!
        }),
        gontainer.NewEntrypoint(func(svc *Service) {
   
            // 直接用,爽!
        }),
    )
}

相关文章
|
5天前
|
缓存 人工智能 自然语言处理
我对比了8个Claude API中转站,踩了不少坑,总结给你
本文是个人开发者耗时1周实测的8大Claude中转平台横向评测,聚焦Claude Code真实体验:以加权均价(¥/M token)、内部汇率、缓存支持、模型真实性及稳定性为核心指标。
2279 12
|
23天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
34938 57
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
17天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
15634 46
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
12天前
|
人工智能 JavaScript Ubuntu
低成本搭建AIP自动化写作系统:Hermes保姆级使用教程,长文和逐步实操贴图
我带着怀疑的态度,深度使用了几天,聚焦微信公众号AIP自动化写作场景,写出来的几篇文章,几乎没有什么修改,至少合乎我本人的意愿,而且排版风格,也越来越完善,同样是起码过得了我自己这一关。 这个其实OpenClaw早可以实现了,但是目前我觉得最大的区别是,Hermes会自主总结提炼,并更新你的写作技能。 相信就冲这一点,就值得一试。 这篇帖子主要就Hermes部署使用,作一个非常详细的介绍,几乎一步一贴图。 关于Hermes,无论你赞成哪种声音,我希望都是你自己动手行动过,发自内心的选择!
3010 28
|
2天前
|
云安全 人工智能 安全
|
2天前
|
人工智能 测试技术 API
阿里Qwen3.6-27B正式开源:网友直呼“太牛了”!
阿里云千问3.6系列重磅开源Qwen3.6-27B稠密大模型!官网:https://t.aliyun.com/U/JbblVp 仅270亿参数,编程能力媲美千亿模型,在SWE-bench等权威基准中表现卓越。支持多模态理解、本地部署及OpenClaw等智能体集成,已开放Hugging Face与ModelScope下载。
|
1天前
|
机器学习/深度学习 缓存 测试技术
DeepSeek-V4开源:百万上下文,Agent能力比肩顶级闭源模型
DeepSeek-V4正式开源!含V4-Pro(1.6T参数)与V4-Flash(284B参数)双版本,均支持百万token上下文。首创混合注意力架构,Agent能力、世界知识与推理性能全面领先开源模型,数学/代码评测比肩顶级闭源模型。
1158 6
下一篇
开通oss服务