本文最后更新于 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 驱动”的模式最大的好处是:前后端契约明确。
-
你写好
resource.api。 -
运行
goctl。 -
前端: 你可以直接把生成的
api定义给前端,甚至可以用goctl生成 TypeScript 代码给前端用。 -
后端: 你只需要盯着
internal/logic下的那几个文件填空,不用担心路由挂错、参数解析出错。
4. 给你的第一步建议
既然你要做分享站,你的第一个 .api 文件建议包含这两个模块:
-
User 模块: 注册、登录。
-
Resource 模块: 提交链接、搜索链接。