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

百度信誉任何在网站展示丰台网站建设公司电话

百度信誉任何在网站展示,丰台网站建设公司电话,自媒体平台收益,在溧水做新店推广那家网站好该文章为学习开源微服务框架kratos的学习笔记!官方文档见:简介 | Kratos Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具。 一、Kratos 项目结构简介 通过 Kratos 工具生成的 Go工程化项目模板如下: applicati…

该文章为学习开源微服务框架kratos的学习笔记!官方文档见:简介 | Kratos

Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具。

一、Kratos 项目结构简介

通过 Kratos 工具生成的 Go工程化项目模板如下:

application
|____api
| |____helloworld
| | |____v1
| | |____errors
|____cmd
| |____helloworld
|____configs
|____internal
| |____conf
| |____data
| |____biz
| |____service
| |____server
|____test
|____pkg
|____go.mod
|____go.sum
|____LICENSE
|____README.md

二、kratos 依赖注入关系图

 其中有关依赖注入的详细文档见:Go工程化 - 依赖注入 | Kratos

以下是我自己总结的kratos依赖注入关系图:

特别注意:data层的 NewXxxRepo 返回的是 biz 层定义的实体数仓的接口类型!!!

这样做的目的:正常情况是 data 层定义好数据操作函数后被 biz 层调用,但这里是 biz 层定义好操作数据层的接口,然后让 data 层去实现,从而实现 data 层对 biz 层的反向依赖。这样做的好处是方便 data 层重构(比如数据存储由 mysql 改为 sqlServer 等),而不需要修改任何 biz 层的代码。

//下面代码位于 data/article.go
// 注意返回参数为 biz 层的接口,ArticleRepo 需要实现 biz.ArticleRepo 接口
func NewArticleRepo(data *Data, logger log.Logger) biz.ArticleRepo {return &articleRepo{data: data,log:  log.NewHelper(logger),}
}// 下面代码位于 biz/article.go
// 在 biz 层定义好数据操作层(data层)的接口,以便让 data 层实现,不管 data 层今后如何实现或重构,都不影响 biz 层的业务代码
type ArticleRepo interface {// dbListArticle(ctx context.Context) ([]*Article, error)GetArticle(ctx context.Context, id int64) (*Article, error)CreateArticle(ctx context.Context, article *Article) errorUpdateArticle(ctx context.Context, id int64, article *Article) errorDeleteArticle(ctx context.Context, id int64) error
}

三、依赖注入生成的代码实例

运用 google/wire 工具将上述依赖注入生成具体的kratos项目代码示例:

原始 wire.go 代码:

// initApp init kratos application.
func initApp(*conf.Server, *conf.Data, *conf.Auth, log.Logger) (*kratos.App, func(), error) {panic(wire.Build(server.ProviderSet, data.ProviderSet, biz.ProviderSet, service.ProviderSet, newApp))
}

 工具生成的代码wire_gen.go:

// initApp init kratos application.
func initApp(confServer *conf.Server, confData *conf.Data, auth *conf.Auth, logger log.Logger) (*kratos.App, func(), error) {dataData, cleanup, err := data.NewData(confData, logger)if err != nil {return nil, nil, err}articleRepo := data.NewArticleRepo(dataData, logger)articleUsecase := biz.NewArticleUsecase(articleRepo, logger)blogService := service.NewBlogService(articleUsecase, logger)userRepo := data.NewUserRepo(dataData, logger)encryptService := biz.NewEncryptService(auth)accountUseCase := biz.NewAccountUseCase(logger, auth, userRepo, encryptService)accountService := service.NewAccountService(logger, accountUseCase)httpServer := server.NewHTTPServer(confServer, logger, blogService, accountService)grpcServer := server.NewGRPCServer(confServer, logger, blogService, accountService)app := newApp(logger, httpServer, grpcServer)return app, func() {cleanup()}, nil
}

http://www.yayakq.cn/news/138922/

相关文章:

  • 徐州云龙城乡建设局网站长沙建设品牌网站
  • 企业 备案 网站服务内容做网站用什么cms 知乎
  • 贵阳建站公司建设网站详细流程
  • 公司建设网站价格表部队网站建设建议
  • 网站中全景是怎么做的公司的网站建设与维护论文
  • 新手如何建网站wordpress文章链接跳转
  • 深圳网站建设_请到中投网络青岛建设集团
  • 浙江新东阳建设集团有限公司网站网站都需要什么类别
  • 如何做网站动态图标网络规划的内容是什么
  • 我不需要做网站深圳网站建设服务哪便宜
  • 昆明做个人网站婚庆网站制作公司
  • 网站建设公司找哪里软件商城下载安卓版
  • 网站开发基本流程ppt安徽网站制作公司
  • 站酷网官网网址软件开发好做吗
  • 小程序可以做企业网站销售的技巧与口才
  • 重庆网站建设外包公司置顶 wordpress
  • 海南论坛论坛网站建设厦门云端企业网站建设
  • 图片演示dw做网站怎么做国内网站
  • 做家电维修网站能接到单吗想学电商去哪学
  • 网站文章怎么做才能被快速收录网站建设 广西
  • 娱乐网站策划书漂亮产品网站
  • 免费建站公司联系方式网站建设合同管辖地
  • 南京建设网站网站的建设不包括什么
  • 网站注册理由自学建站网
  • 万网主机网站建设视频影视公司联系方式
  • 邯郸手机网站建设wordpress更改ip
  • 做的好的手机网站网站建设服务周到
  • 东坑镇网站建设公司软件开发项目管理的分析
  • 阿里云服务器的网站备案高端网站设计地址
  • 饮料网站建设规划书饮食网站建设策划书