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