go-zero 是 CNCF Landscape 收录的 Go 微服务框架,主打"内置工程实践"——把高并发场景下的稳定性能力(熔断、限流、降载、超时、服务发现、可观测)直接做进框架。本文从生态全景出发,按微服务分层系统梳理各层职责与对应的核心库,并给出常用组件选型。
一句话:一个"带电池"的 Go Web + RPC 框架,用代码生成把重复劳动降到最低。
web & rpc framework with builtin engineering practices。从 2018 年起在千万级 DAU 业务上验证,目标是"让繁忙服务稳定"。
链式超时控制、并发控制、限流、自适应熔断、自适应降载——很多时候零配置即可生效。
用 goctl 从 .api / .proto / SQL 一键生成 Go、多端客户端代码,减少样板代码。
CNCF Cloud Native Landscape 收录;配套 goctl、ai-context、mcp-zero 等工具。
go-zero 由"框架内核(core / rest / zrpc)+ 工具链(goctl)+ 工程实践(熔断限流等)"三层构成。
典型的 go-zero 微服务从上到下分为四层。每一层都有对应的库与约定,下面对每层展开。
rest / api,HTTP 接入、路由、参数校验、JWT、限流入口。
zrpc,基于 gRPC 的内部服务,承载核心业务逻辑。
DAO / Model,sqlx + redis 缓存 + mongo,goctl 生成。
发现、配置、日志、指标、熔断限流,贯穿全部。
对外暴露 HTTP 接口,把请求路由到内部 RPC。这一层强调"薄"——只做协议转换与横切治理。
用 DSL 描述路由与结构体,goctl api go 生成 handler/types/handler。
结构体 tag 自动校验(如 options=[you,me]),无需手写。
JWT 鉴权、CORS、限流、日志、熔断可链式挂载。
生成后目录(goctl 产出):etc/(yaml 配置)、internal/handler/、internal/logic/、internal/svc/、internal/types/。
| 职责 | 对应能力 / 库 | 说明 |
|---|---|---|
| 路由与 HTTP | rest / httpx | 兼容 net/http,无外部依赖开销 |
| 参数校验 | 类型 tag + validator | 路径/查询/JSON 自动校验 |
| 鉴权 | jwt / auth middleware | 内置 JWT 中间件 |
| 入口限流 | core/limit · breaker | 令牌桶 / 自适应熔断 |
| 配置 | core/conf | 加载 yaml,支持热更新 |
内部服务间用 gRPC 通信。zrpc 在原生 gRPC 之上加了服务发现、负载均衡、超时与重试。
内建 etcd / consul / nacos / k8s / dns / static 多种发现方式,自动负载均衡。
每个接口一个 logic 文件,业务逻辑与框架解耦,便于测试。
链式超时控制,跨进程调用稳定可控。
goctl rpc 从 .proto 生成服务端/客户端桩代码。
数据库连接与缓存统一在 core/stores,并用 goctl model 从表结构生成 CRUD 代码。
数据库访问基线,封装 sql.DB,支持读写分离。
带 singleflight 的缓存层,防缓存击穿;可配 redis。
内置 redis 客户端,供缓存与分布式锁。
MongoDB 客户端封装。
goctl model mysql -c -src ... 从 DDL 生成 Model。
syncx.SingleFlight 合并并发重复查询。
生成产物含 model.go(CRUD)、user.gen.go(自动生成,勿手改)与缓存逻辑。缓存命中优先走 redis,未命中回源 DB 并回填,并用 singleflight 合并并发穿透。
这些是"稳定性"的真正来源,go-zero 把它们做成可选中间件 / 内建组件,几乎零配置启用。
etcd 为主,支持 consul / nacos / k8s / dns / static。zrpc 自动注册与发现。
读取 yaml,支持配置热更新与结构体映射。
结构化日志,可对接 elk / 标准输出。
内置 metrics 端点,暴露 QPS、延迟、错误率。
OpenTelemetry 集成,跨服务追踪调用链。
自适应熔断,失败率超阈值自动断开。
PeriodLimit(固定窗口)、TokenLimit(令牌桶,依赖 redis)。
自适应负载保护(基于 CPU/队列),过载时拒绝请求。
SingleFlight、ResourceManager、线程安全容器。
kafka(kq)、rabbitmq(dq)的生产消费封装。
缓存层防击穿、去重场景可用。
go-zero 的"生产力中枢"。安装后一条命令即可拉起整套脚手架。
goctl 还能生成 Dockerfile、k8s yaml、Makefile,形成"从接口到部署"的闭环。
| 类别 | 包 / 库 | 用途 | 是否内置 |
|---|---|---|---|
| HTTP | github.com/zeromicro/go-zero/rest | API 网关、路由、中间件 | 内置 |
| RPC | github.com/zeromicro/go-zero/zrpc | gRPC + 服务发现/负载均衡 | 内置 |
| 配置 | core/conf | yaml 配置与热更新 | 内置 |
| 日志 | core/logx | 结构化日志 | 内置 |
| 熔断 | core/breaker | 自适应熔断 | 内置 |
| 限流 | core/limit | 窗口/令牌桶限流 | 内置 |
| 降载 | core/load | 自适应负载保护 | 内置 |
| 并发 | core/syncx | SingleFlight / 资源池 | 内置 |
| 数据库 | core/stores/sqlx | MySQL/PG 访问 | 内置 |
| 缓存 | core/stores/cache · redis | 带 singleflight 的缓存 | 内置 |
| NoSQL | core/stores/mongoc | MongoDB 封装 | 内置 |
| 消息 | core/queue (kq/dq) | Kafka / RabbitMQ | 内置 |
| 发现 | core/discov | etcd/consul/nacos/k8s | 内置 |
| 可观测 | core/telemetry | prometheus + OTEL tracing | 内置 |
| 工具 | core/fx · core/collection · core/bloom | 资源、定时轮、布隆 | 内置 |
| 扩展 | gorm / ent / go-redis / kafka-go | 若不使用内置封装时的备选 | 可选第三方 |
goctl 生成的服务遵循统一目录约定,便于团队协作与维护。
微服务组合时,通常一个 api 服务 聚合多个 rpc 服务,每个 rpc 服务再各自持有 DAO。配置里填好 etcd 地址后,服务自动注册并被发现。