너 바보 아니야

go-zero实战:让微服务Go起来

2021-12-24

go-zero

示例说明:

知识点大纲:

  • Docker 本地开发环境搭建
  • go-zero api rpc 服务的使用
  • go-zero api jwt 鉴权
  • go-zero rpc auth 验证
  • go-zero model 使用
  • go-zero 服务监控
  • go-zero 链路追踪

文章目录:

目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
├── common           # 通用库
├── service # 服务
│ ├── order
│ │ ├── api # order api 服务
│ │ ├── model # order 数据模型
│ │ └── rpc # order rpc 服务
│ ├── pay
│ │ ├── api # pay api 服务
│ │ ├── model # pay 数据模型
│ │ └── rpc # pay rpc 服务
│ ├── product
│ │ ├── api # product api 服务
│ │ ├── model # product 数据模型
│ │ └── rpc # product rpc 服务
│ └── user
│ ├── api # user api 服务
│ ├── model # user 数据模型
│ └── rpc # user rpc 服务
└── go.mod

理解 go-zero 中的底层思想:

0、goctl (go control)

  • 生成 model 命令

    goctl model mysql ddl -src ./model/xxx.sql -dir ./model -c

  • 生成 api 命令

    goctl api go -api ./api/xxx.api -dir ./api

  • 生成 rpc 命令

    goctl rpc proto -src ./rpc/xxx.proto -dir ./rpc

1、api rpc

  • api 对外(客户端、App、PC)
  • rpc 对内 (api、rpc)
  • rpc/svc 通常依赖处理 mysql(orm) redis(cache) 或者调用其他的 rpc 服务
  • 服务之间最好单向调用(不然 a->b 和 b->a 容易造成错误指向矛盾)

2、etc config svc

  • etc (配置文件)
  • config (定义的 go 配置对象)
  • svc (service context,用来传递给 logic 层的)
  • etcd 的注册发现服务

3、interface

  • 方法集
  • 结构体实现接口
  • New + 结构体名称 初始化

4、开发流程

  • goctl环境准备
  • 数据库设计
  • 业务开发
  • 新建工程
  • 创建服务目录
  • 创建服务类型(api/rpc/rmq/job/script)
  • 编写api、proto文件
  • 代码生成
  • 生成数据库访问层代码model
  • 配置config,yaml变更
  • 资源依赖填充(ServiceContext)
  • 添加中间件
  • 业务代码填充
  • 错误处理
标签: go-zero
使用支付宝打赏
使用微信打赏

欢迎点击上方按钮对我打赏,谢谢你给我吃糖果