北京市门户网站建设,js实现网站简体转繁体,建网站需要多少钱2017,桥头镇网站建设公司gone是可以高效开发Web服务的Golang依赖注入框架 github地址#xff1a;https://github.com/gone-io/gone 文档地址#xff1a;https://goner.fun/zh/ 文章目录 优化和新特性gone 核心功能增强内置Goners覆盖测试 后续计划 优化和新特性
gone 核心功能增强 重构了函数参数依… gone是可以高效开发Web服务的Golang依赖注入框架 github地址https://github.com/gone-io/gone 文档地址https://goner.fun/zh/ 文章目录 优化和新特性gone 核心功能增强内置Goners覆盖测试 后续计划 优化和新特性
gone 核心功能增强 重构了函数参数依赖注入 在Cemetery上提供了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标记了属性的结构体一般使用匿名结构体injectBeforehook函数在对第i个参数构造前调用如果injectBefore(x, i)返回值非nilInjectFuncParameters将不再构造fn函数的第i个参数而是将该值的reflect.Value直接作为args数组的第i个值injectAfterhook函数在对第i个参数成功构造后调用 出参说明 argsfn参数的reflect.Value数组err函数构造返回的错误 功能说明 根据fn函数的定义和Gone框架中注册的Goners自动构造fn的参数数组args。然后可以使用func (v Value) Call(in []Value) []Value对函数进行调用。 引入了gone.GonerOption接口用于给Bury提供选项。 gone.GonerId在Bury时给Goner提供GonerIdgone.Order在Bury时给Goner提供一个序号可以用于明确定义Goners的加载顺序和hook函数的执行顺序。gone.IsDefault在Bury时给Goner提供默认的接口类型后续我们将另外些一篇博客介绍该特性。 调整了Cemetery上Bury*方法支持gone.GonerOption接口包括 Bury(Goner, ...GonerOption) CemeteryBuryOnce(goner Goner, options ...GonerOption) CemeteryReplaceBury(goner Goner, options ...GonerOption) error 重构了gone.Preparer Preparer.Run和Preparer.Serve方法支持传入函数作为参数在框架启动后执行可以传0个或者多个函数支持依赖注入Preparer.BeforeStart, Preparer.AfterStart, Preparer.BeforeStop, Preparer.AfterStop 注册的hook函数支持依赖注入添加Preparer.Test方法用于编写测试代码。 基于 gone.Preparer 重构了 TestKit的实现可以使用下面三种方式之一编写测试代码 gone.Test 测试某种类型的Goner: gone.Test(func(line *Line) {assert.Equal(t, line.A.Y, 200)}, Priest)gone.TestAt测试某个具名的Goner gone.TestAt(pointNameA, func(point *Point) {assert.Equal(t, point.X, 0)assert.Equal(t, point.Y, 200)}, config.Priest, Priest)gone.Prepare().TestPrepare上的Test方法支持传入一个函数作为参数函数的参数将会被自动注入。 gone.Prepare(Priest).Test(func(line *Line, //注入gone框架中注册的类型in struct { //注入匿名结构体point *Point gone:example-test-point-a},) {assert.Equal(t, line.A.Y, 200)assert.Equal(t, in.point.Y, 200)})内置Goners 重构goner/gin的HTTP请求参数注入机制。 使用Cemetery.InjectFuncParameters方法对处理请求时的依赖注入机制进行重构。在v0.x的版本中处理HTTP请求注入的方式时每次请求时都会创建一个函数来处理注入在v1.x的版本中会在程序启动流程中一次性构建处理函数每次处理HTTP请求时的性能损耗和gin的性能差异基本一致。HTTP请求参数的依赖注入由于使用InjectFuncParameters重构得到了增强可以支持多个入参入参可以是Gone框架中注册的接口或者结构体指针也可以为被gone标记了属性的结构体一般使用匿名结构体。 重构 goner/config优化代码实现将接口Configure从goner/config包中提到gone包中。 gone.Configure接口用于从抽象的设备中读取配置项支持实现使用其他方式读取配置如从文件、数据库等。从.properties文件从读取配置作为默认的配置读取方式依赖保留在goner/config包中。 新增加goner/viper实现了gone.Configure接口支持从多种配置文件读取配置。 新增加goner/zap集成了go.uber.org/zap用于日志输出。 日志接口Logger从logrus.Logger包移到gone包中。使用日志只需要注入gone.Logger即可无需关注底层使用的何种日志框架。
覆盖测试
对gone的代码编写了大量的单元测试代码覆盖率达到90%。
后续计划
提供更多的开箱可用的Goners接入更多的优秀的Web中间件。编写一个完善的参考案例