当前位置: 首页 > news >正文

宁德做网站东莞seo网站优化排名

宁德做网站,东莞seo网站优化排名,企业网站建设程序,郑州代做网站1. wire 简介 wire 是一个 Golang 的依赖注入框架(类比 Spring 框架提供的依赖注入功能) ⭐ 官方文档:https://github.com/google/wire 这里关乎到编程世界当中一条好用的设计原则:A用到了B,那么B一定是通过依赖注入的…

1. wire 简介

wire 是一个 Golang 的依赖注入框架(类比 Spring 框架提供的依赖注入功能)

⭐ 官方文档:https://github.com/google/wire

这里关乎到编程世界当中一条好用的设计原则:A用到了B,那么B一定是通过依赖注入的方式提供给A的

举一个例子:现在有一个 CodeService(验证码服务)需要调用到 SmsService(短信服务)来完成发送验证码的功能,此时在 CodeService 内部是不知道也不应该了解如何初始化 SmsService 的,那么就要求由外部传入已经构造好的 SmsService 实例

依赖注入有以下优点:

  • 依赖方与被依赖方耦合度较低
  • 可以复用公共组件(比如 MySQL、Redis 等数据库连接对象)
  • 测试方便
  • 扩展性良好

2. wire 安装与下载

下载 wire 对应源码包:go install github.com/google/wire/cmd/wire@latest

💡 温馨提示:install 命令会自动将 wire 下载到 GOPATH 下的 bin 目录,只有配置该路径环境变量才能使用 wire 命令

3. 项目基本结构

该实例项目参考 DDD 架构规范:

  • repository:领域对象的存储
    • dao:存储到关系型数据库
  • service:领域对象的行为(业务相关)
  • web:与 HTTP 请求交互
  • db.go:初始化数据库连接
  • wire.go:依赖注入代码实现
  • main.go:项目启动入口
  • wire_gen.go:依赖注入生成的文件

repository/dao/user.go

package daoimport "gorm.io/gorm"type UserDAO struct {db *gorm.DB
}func NewUserDAO(db *gorm.DB) *UserDAO {return &UserDAO{db: db,}
}

repository/user.go

package repositoryimport "wire_demo/repository/dao"type UserRepository struct {userDAO *dao.UserDAO
}func NewUserRepository(userDAO *dao.UserDAO) *UserRepository {return &UserRepository{userDAO: userDAO,}
}

service/user.go

package serviceimport "wire_demo/repository"type UserService struct {repo *repository.UserRepository
}func NewUserService(repo *repository.UserRepository) *UserService {return &UserService{repo: repo,}
}

web/user.go

package webimport ("github.com/gin-gonic/gin""net/http""wire_demo/service"
)type UserHandler struct {userSvc *service.UserService
}func NewUserHandler(userSvc *service.UserService) *UserHandler {return &UserHandler{userSvc: userSvc,}
}func (u *UserHandler) SayHello(ctx *gin.Context) {ctx.String(http.StatusOK, "Hello,World!")return
}func (u *UserHandler) RegisterRoutes(server *gin.Engine) {server.GET("/hello", u.SayHello)
}

db.go

package mainimport ("gorm.io/driver/mysql""gorm.io/gorm"
)func InitDB() *gorm.DB {db, err := gorm.Open(mysql.Open("root:QWEzxc123456@tcp(localhost:3306)/webook"))if err != nil {panic(err)}return db
}

3. wire 快速入门

步骤一:在项目根目录下创建wire.go

//go:build wireinjectpackage mainimport ("github.com/google/wire""wire_demo/repository""wire_demo/repository/dao""wire_demo/service""wire_demo/web"
)func Init() *web.UserHandler {wire.Build(InitDB,dao.NewUserDAO,repository.NewUserRepository,service.NewUserService,web.NewUserHandler,)return new(web.UserHandler)
}

💡 温馨提示:

  1. 在文件上方使用固定格式 //go:build wireinject 表明这是依赖注入的编译模板文件
  2. 创建一个函数内部使用 wire.Build 方法,传入各种构造方法,wire 会自动分析依赖关系
  3. 返回值无所谓(wire 内部会帮你进行替换)

步骤二:在 wire.go 同级目录下命令行执行wire命令

此时也会发现项目同级目录出现一个wire_gen.go文件,这就是编译生成的文件(内部已经帮你写好了各种构造方法以及依赖之间的传递)

步骤三:在 main.go 文件中正常使用即可!

package mainimport "github.com/gin-gonic/gin"func main() {server := gin.Default()userHandler := Init()userHandler.RegisterRoutes(server)server.Run(":8080")
}
http://www.hkea.cn/news/801782/

相关文章:

  • 国内开源代码网站搜了网推广效果怎么样
  • html5 metro风格网站模板今日新闻事件
  • 网站不在首页显示出来做网络推广
  • 上海网站seo公司网页推广平台
  • 网站服务器租用价格表百度怎么发布自己的广告
  • 经纪人做网站技巧搜索引擎入口yandex
  • 教育网站制作哪家服务好全球外贸采购网
  • 响应式网络网站源码百度关键词查询网站
  • 南京网站制作设计公司网络运营团队
  • 阿里巴巴上怎样做自己的网站seo网站优化网站编辑招聘
  • 网站做付费推广都需要问什么网络热词2022
  • 给男票做网站表白的软件产品市场推广计划书
  • 西安网站制作定制怎么制作自己的个人网站
  • wordpress 如何移动端盐城seo优化
  • asp.net 制作网站开发百度竞价排名软件
  • 百度爱采购推广平台天津网络推广seo
  • 福州市闽侯县建设局网站推广引流吸引人的文案
  • wordpress目录 读写权限泰安短视频seo
  • 东莞建设网站流程澎湃新闻
  • 萧县住房和城乡建设局网站seo排名推广工具
  • 企业网站php模板下载百度百科官网首页
  • 做愛視頻网站在线网页制作网站
  • 织梦pc怎么做手机网站搜索引擎优化的基础是什么
  • 课程建设网站设计源码爱站网反链查询
  • 安徽省建设业协会网站个人网页制作教程
  • 好的摄影网站推荐福州seo顾问
  • html做的好看的网站如何宣传推广产品
  • 微信手机网站制作怎么引流客源最好的方法
  • 宿州建设网站公司前端seo搜索引擎优化
  • 做王境泽表情的网站百度seo关键词优化排名