快速入门
1. 介绍
go-zero 是一个集成了各种工程实践的 web 和 RPC框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。
1.1 web框架
快速高效开发web应用的工具或软件:
- web应用有
动态网站,网络应用,网络服务等,比如抖音,B站,淘宝,在线银行,医疗系统,政务服务,微信,各种网站等等 - 支持
HTTP协议 - 支持
Websocket协议
1.2 RPC
RPC(Remote Procedure Call Protocol)远程过程调用协议。一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

RPC是两个进程间的通信,可以跨设备,RPC框架需要保证在调用远端服务或资源时,就像调用本地应用程序一样方便
1.3 微服务

微服务是由多个功能模块(小服务)组成,共同完成一件事(组成可用的一整个系统),各个服务之间使用RPC进行通信。
- 好处就在于各个服务是独立的个体,其代表了一种编程思维方式,服务需要具备独立性,扩展性,容错性,高可用性等,适用于高并发等大型系统
- 坏处就是复杂性大大提高,管理维护变得困难
要构建一个微服务系统,需要如下手段:
- 服务治理
- 服务注册发现
- 服务调用
- RPC
- REST
- 服务网关
- 服务容错
- 限流
- 熔断
- 降级
- 链路追踪
- 负载均衡
- 监控报警
- 分布式配置中心
- 分布式事务
- 分布式任务调度
- 分布式文件存储
- 消息队列
- Docker
- 云原生
2. 安装
要想使用go-zero框架,需要安装以下环境:
- golang:这里我们安装最新版
go1.23版本 - goctl:goctl是go-zero框架的内置脚手架,可以一键生成代码、文档、部署 k8s yaml、dockerfile 等。
- protoc
protobuf是一种数据序列化和反序列化标准,谷歌出品,和json,xml类似,性能非常高。protoc命令是protobuf的编译器,将.proto后缀的文件编译成对应的开发语言文件protoc-gen-go是protoc的一个插件,用于生成go语言代码(protoc原生不支持生成go语言文件)protoc-gen-go-grpc是protoc的go grpc插件,可以生成grpc相关的go语言文件。
- IDE插件
- goland或者vscode插件市场搜
goctl - 用于支持go-zero框架中
api描述语言
- goland或者vscode插件市场搜
2.1 安装方式
2.1.1 goctl安装
go install github.com/zeromicro/go-zero/tools/goctl@latest
#验证版本
goctl --version
1
2
3
2
3

2.1.2 protoc相关安装
##快捷安装
goctl env check --install --verbose --force
1
2
2
手动安装:
- 打开
https://github.com/protocolbuffers/protobuf/releases - 下载对应的版本(我这里是windows电脑),下载protoc-28.0-win64.zip
- 解压,并设置环境变量即可
- 使用
protoc --version验证 go install google.golang.org/protobuf/cmd/protoc-gen-go@latestgo install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

3. 快速入门
框架的目的是为了帮助开发人员快速高效的开发应用程序
创建一个目录
gozero-learn做为工作目录在当前目录打开
命令行工具运行
goctl api new hello01命令
生成如下代码:

进入
hello01,运行go mod tidy下载依赖在logic目录下的
hello01logic.go中写入如下代码:func (l *Hello01Logic) Hello01(req *types.Request) (resp *types.Response, err error) { // todo: add your logic here and delete this line resp = &types.Response{ Message: "hello " + req.Name, } return }1
2
3
4
5
6
7将
hello01.go改为main.go并运行main函数
访问
http://localhost:8888/form/you
goctl api new xxx可以快捷生成一个最小化的http服务,但我们希望form后面的name可以任意输入,就需要修改代码
修改
hello01.apitype Request { Name string `path:"name"` }1
2
3重新生成代码,运行命令
goctl api go --api hello01.api --dir .--api:指定api文件--dir:指定go文件生成的目录

重新运行访问即可
至此我们初步学会了go-zero
4. 目录说明
example
├── etc
│ └── example.yaml
├── main.go
└── internal
├── config
│ └── config.go
├── handler
│ ├── xxxhandler.go
│ └── xxxhandler.go
├── logic
│ └── xxxlogic.go
├── svc
│ └── servicecontext.go
└── types
└── types.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- example:单个服务目录,一般是某微服务名称
- etc:静态配置文件目录
- main.go:程序启动入口文件
- internal:单个服务内部文件,其可见范围仅限当前服务
- config:静态配置文件对应的结构体声明目录
- handler:handler 目录,可选,一般 http 服务会有这一层做路由管理,
handler为固定后缀 - logic:业务目录,所有业务编码文件都存放在这个目录下面,
logic为固定后缀 - svc:依赖注入目录,所有 logic 层需要用到的依赖都要在这里进行显式注入
- types:结构体存放目录
