https://github.com/google/wire
代码生成器(注入工具)。
详见文档:
https://studygolang.com/articles/22266?fr=sidebar
一. 关于依赖问题
1 func wireApp(*dependencyInject) (AppServer, func(), error) { 2 panic(wire.Build(Layer.ProviderSet, newApp)) 3 }
1. 总入口注入
wireApp是依赖总入口,将相关依赖基础入参,通过调用wireApp进行注入。
2. 二次注入
到了函数体内,其中Layer.ProviderSet, 实际为wire.NewSet()函数,这个函数也有入参,在这里相当于进行二级注入。
这个注入可以有很多个(很多个wire.NewSet()), newApp为最终呈现的一个服务函数,这个里面也会依赖到注入的数据。
3. 根据注入进行build
即 wire.Build()函数的执行,进行串联注入所用的数据。
二. 关于依赖报错问题
下面只是一个例子···
1 inject wireApp: unused provider set "ProviderSet"
provider的报错原因很简单,是因为在wire生成的时候,会生成不同的变量,来进行注入。
如果在生成的过程中,provider根据内容生成的变量,在下一步的执行中,没有找到injection的地方,那么在 dependency injection(依赖注入)的过程中,就会触发golang的语法错误。
这个语法错误就是:变量没有任何调用的地方,作用到wire流程上,就会是 unused 报错。
除了上述的例子外,还会有依赖到的入参,没有生成导致也会在wire执行的时候报错···
基本上wire在使用过程中,多报错,多跟踪报错就能发现问题···
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现