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在使用过程中,多报错,多跟踪报错就能发现问题···

 

posted on 2023-03-09 10:14  黑熊一只  阅读(185)  评论(0)    收藏  举报