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