0%

这篇文章将学习 go-zero 的一些底层组件,这些工具本身不参与业务逻辑,也不直接暴露给最终用户。它们构成了框架的"标准库"——如果上层建筑是房屋的梁柱,这些工具就是砌成梁柱的砖石。它们分布在 core/collection/core/syncx/core/executors/core/fx/core/mr/core/threading/ 六个包中。我们不会逐个罗列所有类型,而是从上层模块的依赖关系出发,沿着"时间工具 → 并发控制 → 执行器 → 高级抽象"这条线索来组织它们。

阅读全文 »

当断路器跳开了、降载器拒绝了请求、限流器拦住了调用方——你如何知道这些事正在发生?更进一步,当系统一切正常时,你如何验证一切正常?这就是可观测性的领域。它不直接参与业务逻辑,但它回答运维中最基本的问题。

  • “刚才发生了什么?” → 日志(Logging)
  • “这个请求经过了哪些服务?每个环节花了多久?” → 链路追踪(Tracing)
  • “系统整体表现如何?QPS、延迟、错误率分别是多少?” → 指标(Metrics)
阅读全文 »

在上一篇文章的最后,我们走完了 go-zero 的服务发现与负载均衡链路——客户端通过 etcd Watch 实时获取在线节点列表,再通过 P2C 算法选择延迟最低、在途请求最少的那个节点发出请求。这一切运转良好的前提是:下游是健康的,流量是可控的,CPU 是空闲的,但生产环境从来不缺少意外。

阅读全文 »

在上一篇文章的最后,我们追踪了一次完整的 zRPC 调用——客户端拦截器从 Tracing 走到 Timeout,然后在 invoker 中将请求发给 gRPC 底层。但这里跳过一个至关重要的问题:invoker 发请求时,到底发给了谁?

阅读全文 »

我们完整走完了 REST 服务的全部链路——从 goctl 生成代码、配置加载与服务启动,到路由匹配、参数解析、响应写入,再到 11 个中间件的协同配合。现在把视角转到微服务架构的另一端:RPC。

阅读全文 »

中间件是 go-zero REST 框架中最容易 凭感觉使用 却最难 准确理解 的部分。它的本质不难——每个中间件都是一个 func(http.Handler) http.Handler,层层包裹业务逻辑。本文从 chain.Chain 的不可变链表机制出发,依次分析每个默认中间件的职责和位置原因,再展开 JWT 认证、签名校验、CORS、SSE 和文件服务这些 附加能力 如何挂载到主链之上。文中会用成功、超时、panic、未认证四种典型请求贯穿讲解,帮你建立"请求穿过中间件链"的肌肉记忆。

阅读全文 »

这篇文章将分析一个 HTTP 请求到底是怎么到达你写的业务 logic 的?以 rest.MustNewServer 为入口,沿着"创建 → 注册 → 启动 → 路由匹配 → 参数解析 → 响应写入"这条主线,把 REST 核心链路的每个环节讲清楚。中间件链的细节(每条中间件的实现原理和顺序设计理由)会留到下一篇专门展开。

阅读全文 »

在上一篇文章中,我们把 goctl 最核心的能力——从 .api 到 REST 工程的解析与代码生成——完整地走了一遍。但一个生产级的微服务系统远不止 REST 接口。你还需要:

  • RPC 服务:内部服务间的通信不走 HTTP,而是走 gRPC——接口用 protobuf 定义,生成类型安全的客户端和服务端桩代码。
  • 数据访问层:业务逻辑最终要读写数据库。表结构定义好了,对应的 model 代码怎么来?缓存怎么自动集成?
  • 部署描述文件:服务写好了,Dockerfile 怎么生成?Kubernetes 的 Deployment、Service、HPA 清单怎么来?Gateway 的骨架怎么搭?
阅读全文 »

我们只需要写几行 .api 定义,goctl 就为你生成了 handlers、logic、routes、types、config 等一系列 Go 文件。这些文件不是在运行时通过反射动态注册的,而是编译前就已经确定好了的、类型安全的 Go 代码。这个"跳跃"的背后,是 goctl 最核心的能力:把一份声明式的 API 定义语言(DSL),解析为结构化的中间表示(IR),再通过模板引擎渲染为可编译的 Go 工程代码

阅读全文 »