go-zero的初遇

go-zero的初遇,第1张

go-zero的初遇 前言

最近一直在部署环境,终于到可以上手写go了,项目组里使用的go-zero,所以今天这篇文字给大家介绍一下这个框架。

推荐配合食用更佳

更为具体的配置和原理可以看这些文章

https://github.com/zeromicro/zero-doc/blob/main/doc/shorturl.mdhttps://github.com/zeromicro/go-zero/blob/master/readme-cn.mdhttps://www.cnblogs.com/upyun/p/14921738.html 微服务整体框架


最上面是 api 网关层。go-zero 需要 api 网关层来代理请求,把request 通过 gRPC 转发给对应的 rpc 服务去处理。这块把具体请求转发到对应的 rpc 服务的业务逻辑,需要手写。

接下来是 rpc 服务层。上图 rpc 服务中的 user 就是接下来向大家演示的模块。每个 rpc 服务可以单独部署。服务启动后会把相关信息注册到 ETCD,这样 api 网关层就可以通过 ECTD 发现具体服务的地址。rpc 服务处理具体请求的业务逻辑,需要手写。

最后是Model 层。model 层封装的是数据库 *** 作的相关逻辑。如果是查询类的相关 *** 作,会先查询 redis 中是否有对应的缓存。非查询类 *** 作,则会直接 *** 作 MySQL。goctl 能通过 sql 文件生成普通的 CRDU 代码。上文也有提到,目前 goctl 这部分功能只支持 MySQL。

框架目录

├── blog.api # api 文件
├── blog.go # 程序入口文件
├── etc
│ └── blog-api.yaml # api 网关层配置文件
├── go.mod
├── go.sum
└── internal
├── config
│ └── config.go # 配置文件
├── handler # 视图函数层, handler 文件与下面的 logic 文件一一对应
│ ├── adduserhandler.go
│ ├── deleteuserhandler.go
│ ├── getusershandler.go
│ ├── loginhandler.go
│ ├── routes.go
│ └── updateuserhandler.go
├── logic # 需要手动填充代码的地方
│ ├── adduserlogic.go
│ ├── deleteuserlogic.go
│ ├── getuserslogic.go
│ ├── loginlogic.go
│ └── updateuserlogic.go
├── svc # 封装 rpc 对象的地方,后面会将
│ └── servicecontext.go
└── types # 把 blog.api 中定义的结构体映射为真正的 golang 结构体
└── types.go`

文件间的调用关系


因为到此时还没涉及到 rpc 服务,所以 api 内各模块的调用关系就是非常简单的单体应用间的调用关系。routers.go 是路由,根据 request Method 和 url 把请求分发到对应到的 handler 上,handler 内部会去调用对应的 logic. logic 文件内是我们注入代码逻辑的地方。

后来的后来

看完上面这些对这个框架基本有个认识,用起来问题应该不大

我再占个坑

后面再更新这个微服务框架更深的原理

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5707118.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存