在 go 框架中,可以用依赖注入完成代码复用。实际方法如下:组装依赖项 go getgithub.com/google/wire建立接口和完成建立依赖图,关联插口到完成获得已引入案例 实战案例 ,将依赖项注入到 api 路由器中
在 Go 框架中根据依赖注入完成代码复用
依赖注入是一种设计模式,它通过在运行时向目标提供其依赖项来达到代码复用。在 Go 框架中,我们可以使用依赖注入库来简化编码反复难题。
1. 组装依赖项
gogetgithub.com/google/wire
2. 建立接口和完成
// UserService 插口
type UserService interface {
GetUser(id int) (User, error)
CreateUser(u User) (User, error)
}
// UserServiceImpl 完成 UserService 插口
type UserServiceImpl struct {
userRepository UserRepository
}
func (s UserService) GetUser(id int) (User, error) {
return s.userRepository.Get(id)
}
func (s UserService) CreateUser(u User) (User, error) {
return s.userRepository.Create(u)
}
3. 建立依赖图
funcCreateUserService(wire.ProviderSet)(UserService,error){
wire.Bind(new(UserService),new(UserServiceImpl))
wire.Bind(new(UserRepository),new(UserRepositoryImpl))
returnnew(UserServiceImpl),nil
}
在这个依赖图中,大家绑定 UserService 插口到 UserServiceImpl 完成,并绑定 UserRepository 插口到 UserRepositoryImpl 完成。
4. 获得已引入案例
我们可以使用注入器来获得已注入的案例 。
funcmain(){
injector,err:=CreateUserService(wire.NewSet())
iferr!=nil{
log.Fatal(err)
}
userService:=injector.Get(new(UserService))
_=userService//应用已引入案例
}
5.实战案例
假设有一个 API 路由器需要一个 UserService 案例 :
funcGetUsers(whttp.ResponseWriter,rhttp.Request){
userService:=injector.Get(new(UserService))
users,err:=userService.GetUsers()
iferr!=nil{
http.Error(w,http.StatusInternalServerError,err)
return
}
//载入回应
}
根据使用依赖注入,大家可以轻松地将 UserService 案例 注入到路由器中,而无需显式建立或传送它。这优化了编码,提升了易读性和可扩展性。
以上就是怎样在golang框架中根据依赖注入完成代码复用?的详细内容,大量请关注其他类似文章!