依赖注入在 go 里的未来趋势看中,wire 架构稳定发展,给予自定生成器等新功能。随着 go 小区对 di 的重视,di 在 go APP开发里将饰演更重要角色。
Go 框架中依赖注入的未来趋势
依赖注入 (DI) 是一种设计模式,它允许你在运行时将依赖项传达给目标。它通过将依赖项的实例化与对象的创建解耦,提升了代码的可测试性和可扩展性。
在 Go 中,有许多 DI 架构供选择,但最流行可谓是 [wire](https://github.com/google/wire)。wire 是一种用 Go 整理的简易而强大的 DI 架构,它提供了一组强大的功能。
实战案例
使我们建立一个简单的 Go 应用软件来演试怎么使用wire 开展依赖注入。
55
56
57
58
59
packagemain
import(
"context"
"fmt"
"time"
)
// TimeProvider 给予时长信息
type TimeProvider interface{
Now()time.Time
}
// RealTimeProvider 是 TimeProvider 的完成,它回到当前时间
type RealTimeProvider struct{}
func(rRealTimeProvider)Now()time.Time{
returntime.Now()
}
// Service 需要一个 TimeProvider 案例 来工作
type Service struct{
TimeTimeProvider
}
//NewService返回一个 Service 案例 ,引入TimeProvider
funcNewService(tTimeProvider)Service{
return&Service{
Time:t,
}
}
//Run运行服务并打印当前时间
func(sService)Run(ctxcontext.Context)error{
now:=s.Time.Now()
fmt.Println(now)
returnnil
}
funcmain(){
ctx:=context.Background()
//应用wire 来引入依赖项
injector,err:=wire.NewInjector(wire.Value(&RealTimeProvider{}),wire.Bind(new(TimeProvider),new(RealTimeProvider)))
iferr!=nil{
panic(err)
}
//从 injector 中获得 Service 案例
varserviceService
iferr:= injector.Populate(&service);err!=nil{
panic(err)
}
//运行服务
iferr:=service.Run(ctx);err!=nil{
panic(err)
}
}
在这个示例中,wire 负责将 RealTimeProvider 案例 注入到 Service 中。以在 main 函数中应用 wire.NewInjector 来创建 injector,大家可以在 injector.Populate方式中以传送地址表针来获得 Service 案例 。
未来趋势
Go中 DI 的未来看上去非常光辉。wire 已经飞速发展,并添加了新功能,比如可以使用自定生成器生成代码。别的 DI 架构也在涌现,为开发者提供了更多挑选。
随着 Go 小区对 DI 的日益重视,大家可以预期 DI 将于 Go APP开发中实现越来越重要的作用。
以上就是golang框架中依赖注入的未来趋势的详细内容,大量请关注其他类似文章!