ZVVQ代理分享网

golang框架中依赖注入的未来趋势(golang引入第三

作者:zvvq博客网
导读依赖注入在 go 中的未来趋势看好,wire 框架持续发展,提供自定义生成器等新功能。随着 go 社区对 di 的重视,di 在 go 应用程序开发中将扮演更重要的角色。 Go 框架中依赖注入的未来趋

依赖注入在 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框架中依赖注入的未来趋势的详细内容,大量请关注其他类似文章!