在 golang 中,可以用依赖注入架构,如 wire,来管理对象间的依存关系。wire 应用代码生成和反射完成这一功能,容许在运行时传递依赖项。要使用 wire,必须创建一个引入函数,特定怎样创建对象以及依赖项,并用 wire.build函数创建和初始化对象。根据依赖注入,能够轻松变更程序中的依存关系,而无需修改代码的其他部分。 zvvq.cn
内容来自zvvq
应用 Golang 架构对依赖项开展依赖注入
依赖注入是一种设计模式,它允许在运行时将依存关系传达给目标。在 Golang 中,有很多架构可以方便地完成依赖注入,比如 Wire。
内容来自zvvq,别采集哟
应用 Wire完成依赖注入
Wire 是一个 Golang 依赖注入库,它使用代码生成和运行中反射来简化依存关系的监管。要使用 Wire,首先要在项目中导进它:
import"github.com/google/wire"
内容来自samhan666
下面,创建一个引入函数,该函数回到要引入对象以及依赖项。比如,如果有一个 UserService 取决于 UserRepository,则引入函数能够具体如下:
funcNewUserService(ur*UserRepository)*UserService{
return&UserService{ur}
内容来自samhan666
} 内容来自samhan666
varSet = wire.NewSet(NewUserService,NewUserRepository)
内容来自zvvq,别采集哟
Set 函数应用 wire.NewSet 创建一个结合,该结合指定了怎样创建服务和存储库。 copyright zvvq
要使用引入目标,可以创建一个 wire.Build函数:
内容来自samhan
funcmain(){
zvvq
wire.Build(Set)
copyright zvvq
} zvvq好,好zvvq
这会建立并复位 UserService 和 UserRepository目标,并将它们注入到必须他们代码中。 zvvq.cn
实战案例
考虑一个简单的 HTTP 服务器,它使用一个服务层和一个存储库层来管理用户信息。服务层有一个 UserService 解决客户有关的思路,存储库层有一个 UserRepository来管理用户信息。 内容来自samhan
可以用 Wire完成对这两个层依赖注入:
packagemain
import( 本文来自zvvq
"net/http" copyright zvvq
"github.com/google/wire" 内容来自zvvq,别采集哟
"github.com/gorilla/mux" copyright zvvq
)
本文来自zvvq
type UserService struct{
本文来自zvvq
UserRepository*UserRepository 内容来自zvvq
} 内容来自samhan666
func(s*UserService)GetUser(whttp.ResponseWriter,r*http.Request){
本文来自zvvq
//... 内容来自samhan666
} 内容来自samhan
type UserRepositorystruct{}
内容来自zvvq
func(r*UserRepository)GetUsers()[]string{ zvvq好,好zvvq
//... 内容来自samhan666
} 内容来自samhan666
varSet = wire.NewSet(NewUserService,NewUserRepository,NewRouter)
varRouter*mux.Router
内容来自samhan
funcNewRouter()*mux.Router{ 内容来自zvvq
r:=mux.NewRouter() zvvq.cn
r.HandleFunc("/users",UserService.GetUser)
zvvq
Router=r
returnRouter zvvq好,好zvvq
}
copyright zvvq
funcmain(){ 内容来自zvvq,别采集哟
wire.Build(Set,NewRouter)
} 内容来自samhan666
在这个例子中,Set 结合还包含了 NewRouter 函数,该函数建立并配置了 Gorilla mux 路由器。 NewRouter 函数也使用 wire.Build展开了引入,那样它就可以浏览 UserService 和 UserRepository目标。
copyright zvvq
根据使用依赖注入,可以轻松地变更程序中的依存关系,而无需修改代码的其他部分。这使得程序更容易维护和测试。
zvvq
以上就是怎么使用golang架构对一个依赖项开展依赖注入的详细内容,大量请关注其他类似文章! zvvq