zvvq技术分享网

如何使用golang框架对一个依赖项进行依赖注入(

作者:zvvq博客网
导读在 golang 中,可以使用依赖注入框架,如 wire,来管理对象之间的依赖关系。wire 使用代码生成和反射实现这一功能,允许在运行时传递依赖项。要使用 wire,需要创建一个注入函数,指

在 golang 中,可以用依赖注入架构,如 wire,来管理对象间的依存关系。wire 应用代码生成和反射完成这一功能,容许在运行时传递依赖项。要使用 wire,必须创建一个引入函数,特定怎样创建对象以及依赖项,并用 wire.build函数创建和初始化对象。根据依赖注入,能够轻松变更程序中的依存关系,而无需修改代码的其他部分。

内容来自samhan666

内容来自zvvq,别采集哟

应用 Golang 架构对依赖项开展依赖注入

zvvq.cn

依赖注入是一种设计模式,它允许在运行时将依存关系传达给目标。在 Golang 中,有很多架构可以方便地完成依赖注入,比如 Wire。 zvvq好,好zvvq

应用 Wire完成依赖注入 zvvq

Wire 是一个 Golang 依赖注入库,它使用代码生成和运行中反射来简化依存关系的监管。要使用 Wire,首先要在项目中导进它: 内容来自samhan666

import"github.com/google/wire" 本文来自zvvq

下面,创建一个引入函数,该函数回到要引入对象以及依赖项。比如,如果有一个 UserService 取决于 UserRepository,则引入函数能够具体如下:

zvvq好,好zvvq

funcNewUserService(urUserRepository)UserService{

zvvq.cn

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来管理用户信息。

本文来自zvvq

可以用 Wire完成对这两个层依赖注入:

内容来自zvvq

packagemain 内容来自zvvq

import(

内容来自samhan666

"net/http"

内容来自zvvq

"github.com/google/wire"

zvvq好,好zvvq

"github.com/gorilla/mux" 本文来自zvvq

)

zvvq.cn

type UserService struct{ 内容来自zvvq,别采集哟

UserRepositoryUserRepository zvvq.cn

}

copyright zvvq

func(sUserService)GetUser(whttp.ResponseWriter,rhttp.Request){

内容来自samhan

//...

zvvq.cn

} zvvq好,好zvvq

type UserRepositorystruct{} 本文来自zvvq

func(rUserRepository)GetUsers()[]string{

zvvq好,好zvvq

//... 内容来自samhan666

} zvvq

varSet = wire.NewSet(NewUserService,NewUserRepository,NewRouter) 内容来自zvvq,别采集哟

varRoutermux.Router

zvvq好,好zvvq

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