gone是可以高效开发Web服务的Golang依赖注入框架
github地址:https://github.com/gone-io/gone
文档地址:https://goner.fun/zh/
函数参数的依赖注入
函数参数的依赖注入,是v1.x版本正式发布的新功能,允许使用Goners仓库中的Goners来自动生成函数的参数对应的[]reflect.Value
数组。这个功能由Cemetery
接口的InjectFuncParameters
方法提供。
业务编写上,一般情况,不推荐使用该功能;如果尝试扩展Gone框架的功能,可以使用该功能。
InjectFuncParameters
方法说明
- 方法定义
InjectFuncParameters(
fn any,
injectBefore func(pt reflect.Type, i int) any,
injectAfter func(pt reflect.Type, i int),
) (args []reflect.Value, err error)
- 入参说明:
- fn,需要被注入的函数;函数允许拥有多个入参,入数可以是Gone框架中注册的接口或者结构体指针,也可以为被
gone
标记了属性的结构体,一般使用匿名结构体; - injectBefore,hook函数,在对第i个参数构造前调用,如果
injectBefore(x, i)
返回值非nil,InjectFuncParameters将不再构造fn函数的第i
个参数,而是将该值的reflect.Value
直接作为args数组的第i个值; - injectAfter,hook函数,在对第i个参数成功构造后调用;
- fn,需要被注入的函数;函数允许拥有多个入参,入数可以是Gone框架中注册的接口或者结构体指针,也可以为被
- 出参说明
- args,fn参数的
reflect.Value
数组 - err,函数构造返回的错误
- args,fn参数的
- 功能说明:
根据fn函数的定义和Gone框架中注册的Goners,自动构造fn的参数数组args。然后可以使用func (v Value) Call(in []Value) []Value
对函数进行调用。
Gone 源代码中使用例子
WrapNormalFnToProcess
func WrapNormalFnToProcess(fn any) Process {
// Process函数只有一个 Cemetery 参数
return func(cemetery Cemetery) error {
// 根据函数的定义,使用 cemetery.InjectFuncParameters 构造 函数的参数数组
args