go-zero项目只有api文件需要自己写,其他都能goctl自动生成吗

11 次阅读

本文最后更新于 2026年5月4日。

简单直接的回答是:goctl 负责搬砖(结构),你负责装修(逻辑)。

虽然 goctl 强悍到能生成 70%~80% 的代码,但为了让你少走弯路,我们需要理清哪些是“生成的”,哪些必须“手写”。


1. 自动生成的(搬砖活)

只要你的 .api 文件和数据库表(Schema)写得好,以下内容都是一键生成

  • 路由层 (Router): 接口路径映射、中间件挂载。

  • 参数解析与校验 (Handler): 自动把前端传来的 JSON 或 Form 参数转成 Go 结构体,并做基础校验。

  • 数据库 CRUD (Model): 针对 PostgreSQL 的 Insert/Update/Find/Delete 操作。

  • 配置管理 (Config): 自动读取 yaml 文件并映射到代码变量。

  • 服务骨架 (Main/ServiceContext): 整个项目的启动入口和依赖注入容器。


2. 必须自己写的(核心技术)

goctl 再聪明也猜不到你的业务逻辑。以下三块必须你亲自操刀:

A. 业务逻辑 (Logic 层)

这是项目的灵魂。比如用户点击“上传链接”:

  • 你需要校验链接格式对不对。

  • 你需要检查这个用户今天是不是上传超过 100 条了(防刷)。

  • 你需要把数据存进数据库后,可能还要发个消息给审核系统。

    这些 if-else 和业务流程,都在 internal/logic 目录下由你手写。

B. 数据库初始化与复杂查询

  • goctl 生成的 Model 只包含简单的增删改查。

  • 你的核心功能——搜索: 比如“按关键词搜索并按热度排序”,这种复杂的 SQL 语句(尤其是利用 PostgreSQL 的全文检索)需要你在 Model 层手动添加方法。

C. 鉴权中间件逻辑 (Middleware)

虽然 go-zero 帮你预留了 JWT 校验的位置,但比如“只有 VIP 用户能看某些链接”这种权限控制逻辑,需要你自己写中间件代码。


3. 为什么这种模式很香?

这种“API 驱动”的模式最大的好处是:前后端契约明确。

  1. 你写好 resource.api

  2. 运行 goctl

  3. 前端: 你可以直接把生成的 api 定义给前端,甚至可以用 goctl 生成 TypeScript 代码给前端用。

  4. 后端: 你只需要盯着 internal/logic 下的那几个文件填空,不用担心路由挂错、参数解析出错。


4. 给你的第一步建议

既然你要做分享站,你的第一个 .api 文件建议包含这两个模块:

  1. User 模块: 注册、登录。

  2. Resource 模块: 提交链接、搜索链接。