Go 框架中的依赖注入器皿配备
依赖注入 (DI) 是一种设计模式,它可以简化编码多元性、提升模块化和可测试性。在 Go 框架中,可以用 DI 器皿来管理和引入依赖项,比如服务、存储库和控制板。
要配备 DI 器皿,往往需要实行以下步骤:
1.组装 DI 库
有多个流行的 Go DI库供选择,比如:
[wire](https://github.com/google/wire) [di](https://github.com/uber-go/di) [go-inject](https://github.com/palantir/go-inject)2. 定义接口和结构体
针对要引入的每个依赖项,必须定义一个接口和一个完成该接口结构体。
//定义 Greeting 服务接口
typeGreetingServiceinterface{
Greet(namestring)string
}
//定义 Greeting 服务的一个完成
typeGreetingServiceImplstruct{
//...
}
3. 建立依赖图
依赖图叙述了应用软件部件间的依存关系。它可以手动撰写或使用工具形成。
//应用 wire 界定依赖图
funcInitializeApp(namestring)(App,func(),error){
wire.Build(
NewApp,
NewGreetingServiceImpl,
)
//...
}
4. 给予具体实现
在依赖图中,需要提交具体实现的构建函数。
funcNewGreetingServiceImpl()GreetingServiceImpl{
return&GreetingServiceImpl{
//...
}
}
5. 复位器皿
在应用软件运作时,必须通过启用容器复位函数来复位 DI 器皿。
funcmain(){
app,cleanup,err:=InitializeApp("John")
iferr!=nil{
//...
}
defercleanup()
//...
}
6. 引入依赖项
应用软件部件能通过依赖注入来访问依赖项。
typeAppstruct{
greetingServiceGreetingService
//...
}
funcNewApp(gsGreetingService)App{
return&App{
greetingService:gs,
//...
}
}
实战案例
下面是一个应用 Wire 库开展依赖注入的实例:
packagemain
import(
"fmt"
"github.com/google/wire"
)
//定义 Greeting 服务接口
typeGreetingServiceinterface{
Greet(namestring)string
}
//定义 Greeting 服务的一个完成
typeGreetingServiceImplstruct{
}
func(gGreetingServiceImpl)Greet(namestring)string{
returnfmt.Sprintf("Hello,%s!",name)
}
//界定应用软件
typeAppstruct{
greetingServiceGreetingService
}
func(appApp)Greet(namestring)string{
returnapp.greetingService.Greet(name)
}
//搭建应用软件需要的依赖项
funcInitializeApp(namestring)(App,func(),error){
wire.Build(
NewApp,
NewGreetingServiceImpl,
)
//...(省去别的依赖项的完成)
}
funcmain(){
app,cleanup,err:=InitializeApp("John")
iferr!=nil{
//...
}
defercleanup()
message:=app.Greet("John")
fmt.Println(message)
}
以上就是golang框架中如何配置依赖注入器皿的详细内容,大量请关注其他类似文章!