0%

在上一篇文章中,我们把 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 工程代码

阅读全文 »

这篇文章我们会从仓库顶层结构出发,逐步拆解到四层架构,然后用 REST 和 RPC 两条主调用链示范 请求到底穿过了哪些层,最后归纳出贯穿整个项目的几种设计模式。读完这篇文章后,你对后续任何一篇文章中涉及的模块,都能快速定位到它在整体架构中的位置。

阅读全文 »

在日常的后端开发里,无论是刚开始写一个新的微服务,还是在已有系统上增加接口,我们都要面对一连串 通用但琐碎 的事情:启动配置、参数校验、错误处理、日志、超时、限流、熔断、服务注册与发现、链路追踪。go-zero 的定位是一个集成了各种工程实践的 Web 和 RPC 框架,它把这些通用能力下沉到框架层面,让开发者把精力集中在业务逻辑上。

阅读全文 »

我们已经整体分析了 Grype 的源码实现原理。作为 Go 语言编写的安全工具,Grype 不仅在功能上十分强大,其工程设计和开源维护实践也非常值得学习。本文将从源码目录结构、框架设计、测试策略、CI/CD 流程等多个维度全面总结分析这个项目。

阅读全文 »

我们已经沿着 Grype 的扫描链路,我们从 main() 一路跟踪到了漏洞匹配和风险评分。当 VulnerabilityMatcher.FindMatchesContext() 执行完毕,返回了 remainingMatches(有效匹配)和 ignoredMatches(被忽略匹配)。那么问题来了:从这两组匹配结果到用户最终看到的报告,中间还发生了什么?

阅读全文 »

拿到匹配结果只是"发现漏洞"的终点,"修复漏洞"的起点在哪里?想象这样一个场景:一次扫描产生了 200 条漏洞匹配,其中既有 Critical 级别的远程代码执行漏洞,也有 Low 级别的本地拒绝服务漏洞。安全工程师面临一个现实问题——应该先修哪一个?

阅读全文 »

前面的文章中,我们分析了 Grype 如何加载漏洞数据库、匹配框架如何运转、以及不同生态系统如何实施各自的匹配策略。但在整个漏洞匹配链路中,有一个环节被我们反复提及却一直未被展开讨论——版本比较。Grype 需要为 14 种以上的软件包格式分别提供正确的版本比较逻辑,而每一套逻辑背后都对应着一个生态的历史积累、社区约定和技术规范。

阅读全文 »