
上周三下午,我第 17 次在 Claude Code 里输入:“这是一个 Go 微服务项目,使用 Gin 框架,数据库是 PostgreSQL,缓存用 Redis,消息队列是 Kafka…” 打到一半我突然停下——我这是在干嘛?给 AI 做入职培训吗?
那一刻我瞄了一眼时间,发现光是这周重复输入项目背景,就已经花了将近 40 分钟。40 分钟啊,够我慢慢喝杯咖啡,还能刷几篇技术博客。
于是我决定:必须搞定 GStack。
现在?我敲 /use backend-go,所有上下文一键加载,Claude 瞬间变成懂我项目的资深后端搭档。花了一小时搭建的 GStack 体系,每天省下的时间够我喝好几杯咖啡。
如果你已经会用 Claude Code 写代码,但还在重复输入项目背景、技术栈、代码规范——那你只发挥了它 30% 的潜力。GStack 不只是"保存提示词",它是你和 AI 之间的"默契培养器"。
本文聚焦后端开发场景,分享我踩坑后的进阶技巧:从分层架构设计到动态变量使用,从技能链组合到与日常开发工作流的深度集成。不需要你从零开始,只需要你愿意把重复劳动交给机器。
刚开始用 GStack 时,我犯了一个典型错误:把整个项目背景、技术栈、代码规范全部写死在一个巨大的 GStack 文件里。结果换了新项目要复制粘贴改半天,一旦项目结构变了,整个模板都要重写。
后来我悟了:好的 GStack 应该像函数——输入参数,输出上下文。
GStack 是 YC CEO Garry Tan 开源的 Claude Code 技能系统,核心理念是"把 Claude Code 变成一支你可以真正管理的虚拟工程团队"。它通过独立的 Markdown 提示文件,让 AI 在不同场景下切换不同的"思维模式"——CEO 视角看产品、工程师视角写代码、审查者视角找 Bug。
对于后端开发,这意味着我们可以设计专门的上下文模板:数据库 Schema 认知(表结构、索引策略)、API 规范约束(RESTful/GraphQL)、微服务通信协议(gRPC/HTTP)、部署环境差异(dev/staging/prod)。不再是每次新开对话都要重新介绍一遍项目,而是一键加载,直接开工。
我现在的 GStack 体系采用分层架构,就像设计一个良好的后端项目:
基础层(base-backend) ← 所有后端项目通用
↓
技术栈层(stack-go-gin) ← Go + Gin + GORM 专用
↓
项目层(project-user-service) ← 用户服务特定
↓
任务层(task-api-crud) ← 具体任务模板基础层定义所有后端项目通用的原则:
<!-- base-backend.md -->
你是资深后端工程师,遵循以下原则:
- 优先返回结构化错误,不用 panic
- 数据库操作必须带 context,超时控制要到位
- 日志使用结构化日志(zap/logrus),便于后续分析
- 敏感操作必须记录审计日志技术栈层针对具体技术组合:
<!-- stack-go-gin.md -->
技术栈:Go 1.21 + Gin + GORM + PostgreSQL
代码规范:
- Handler 只负责 HTTP 相关(参数绑定、响应格式化)
- 业务逻辑放在 service 层,可单元测试
- 数据库模型放在 models/,必须带 json 和 gorm 标签
- 数据库查询必须预加载关联数据,避免 N+1这样设计的好处是:新项目只需要写项目层,上层全部复用。我在 3 个微服务项目中复用了同一套基础层和技术栈层,每个新项目只需要 5 分钟配置项目特定的上下文。
正如提示工程的最佳实践所说:“Show, Don’t Tell”——用清晰的结构和示例,比长篇描述规则更有效。
分层架构解决了"复用"的问题,但还不够灵活。有一次我要生成测试环境和生产环境的不同配置,以前要写两个几乎一样的 GStack,维护起来很痛苦。
后来我发现 GStack 支持变量替换,瞬间打开了新世界。
<!-- db-context.md -->
---
variables:
- name: env
description: 环境(dev/staging/prod)
- name: db_type
description: 数据库类型(postgres/mysql)
---
当前环境:{{env}}
{{#if (eq env "prod")}}
生产环境配置:
- 连接池:最小 10,最大 100
- 慢查询日志阈值:100ms
- 禁止直接删除数据,使用软删除(deleted_at 字段)
- 所有查询必须走索引
{{else}}
开发环境配置:
- 连接池:可关闭(本地开发)
- 慢查询日志阈值:500ms
- 支持数据清理操作
{{/if}}
数据库类型:{{db_type}}
{{#if (eq db_type "postgres")}}
PostgreSQL 特定:
- 使用 pgx 驱动,性能更好
- JSONB 字段查询注意 GIN 索引
- 使用 RETURNING 获取插入后的 ID
{{/if}}使用方式:/use db-context env=prod db_type=postgres
一个模板覆盖所有环境组合,维护成本从 6 个文件降到 1 个。这就是"像函数一样设计 GStack"的实践——输入参数,输出对应的上下文。
分层架构和动态变量让 GStack 具备了复用性和灵活性,但真正的效率提升来自于把它变成开发流程的默认选项。我针对后端开发的几个高频场景,设计了专门的 GStack:
场景一:数据库 Schema 变更后的代码同步
DBA 改了表结构,我需要同步更新模型、Repository、API 三个地方。以前要手动检查差异,现在:
<!-- db-schema-sync.md -->
请根据以下数据库 Schema 生成对应代码:
1. GORM 模型定义(放在 models/{{table_name}}.go)
2. Repository 层代码(放在 repo/{{table_name}}_repo.go)
3. 基础的 CRUD API Handler(放在 handler/{{table_name}}_handler.go)
4. 对应的单元测试模板
Schema:
{{schema}}
要求:
- 模型字段必须带 json 标签,驼峰命名
- 时间字段使用 time.Time,自动处理 created_at/updated_at
- 软删除字段 deleted_at 使用 gorm.DeletedAt
- Repository 层必须实现接口,方便 mock 测试使用时直接粘贴 DBA 给的 Schema,Claude 就能生成全套代码框架。
场景二:Code Review 助手
团队代码审查时,我设计了一个专门的审查 GStack:
<!-- code-review-backend.md -->
作为资深后端工程师,请审查以下代码,重点关注:
- 数据库:是否有 N+1 查询、连接未关闭、SQL 注入风险
- 错误处理:是否漏判错误、是否暴露敏感信息给客户端
- 并发安全:是否有竞态条件、是否正确使用锁/channel
- 资源管理:文件句柄、网络连接是否正确释放
- 性能:是否有明显的性能瓶颈、内存泄漏风险
- 规范:是否符合项目的 GStack 规范
请按严重程度分类问题,并提供修改建议。这个 GStack 成了我们团队的审查标准,新人也能按照统一标准检查代码。
场景三:API 文档驱动开发
和产品对齐 API 后,我直接让 Claude 根据 OpenAPI 规范生成代码框架:
<!-- api-from-spec.md -->
根据以下 OpenAPI 3.0 规范生成 Go 代码:
1. Handler 接口定义(符合项目 handler 规范)
2. 请求/响应结构体(放在 dto/ 目录)
3. 参数校验逻辑(使用 validator 库)
4. 路由注册代码
规范文件:{{spec_path}}这三个 GStack 覆盖了我 80% 的日常开发场景,剩下的 20% 是复杂的业务逻辑和架构设计——但 GStack 已经帮我处理了所有重复性工作。现在我的 workflow 变成了:加载对应 GStack → 描述需求 → 审查生成结果 → 微调细节。开发效率至少提升了一倍。
另外,Claude Code 还支持在项目根目录放 CLAUDE.md 文件,项目特定的 GStack 可以放在这里自动加载,省去每次手动调用的步骤。
理论讲完了,来看一个完整的实战案例。假设我们要搭建一个用户服务微服务,这是我在实际项目中的 GStack 配置:
第一步:创建基础层
<!-- ~/.claude/skills/base-microservice.md -->
微服务开发通用规范:
- 使用领域驱动设计(DDD)分层:handler → service → repository → model
- 所有外部依赖通过接口注入,便于测试
- 配置管理使用 viper,支持环境变量覆盖
- 日志统一使用 zap,链路追踪使用 jaeger
- 健康检查端点:/health/live(存活)和 /health/ready(就绪)第二步:创建技术栈层
<!-- ~/.claude/skills/stack-go-gin-pg.md -->
技术栈:Go 1.21 + Gin + GORM + PostgreSQL + Redis
依赖注入:使用 wire 生成注入代码
数据库:
- 主从分离,写操作走主库,读操作走从库
- 连接池配置通过环境变量注入
- 慢查询日志阈值:生产 100ms,开发 500ms
缓存:
- 使用 Redis 作为缓存层
- 缓存 key 规范:service:entity:id
- 缓存穿透使用布隆过滤器防护第三步:创建项目层
<!-- CLAUDE.md(放在项目根目录) -->
项目:用户服务(user-service)
领域模型:
- User:用户基础信息
- UserProfile:用户扩展资料
- UserAuth:用户认证信息(密码、第三方绑定)
业务规则:
- 用户名唯一,支持 3-20 位字母数字下划线
- 邮箱必须验证后才能使用部分功能
- 密码使用 bcrypt 加密,成本因子 12
- 支持手机号+验证码登录
集成:
- 消息队列:用户注册后发送欢迎邮件(异步)
- 外部服务:调用短信服务发送验证码第四步:使用演示
现在我要实现用户注册 API,只需要:
/use stack-go-gin-pg
请实现用户注册 API:
- 接收用户名、密码、邮箱
- 验证用户名唯一性
- 密码 bcrypt 加密存储
- 发送验证邮件(异步)
- 返回用户基本信息(不含密码)Claude 会自动加载微服务规范、Go 技术栈约束、用户服务业务规则,生成的代码直接符合项目标准,不需要反复调整。
这就是 GStack 的威力:一次配置,长期受益。以前实现这个 API,我需要先介绍项目背景(5分钟)、技术栈(3分钟)、代码规范(3分钟),然后才能开始写代码。现在?30 秒加载 GStack,直接描述需求。
这套 GStack 配置我放在团队 Git 仓库里,新成员第一天就能按照统一规范开发,不再需要老员工反复指导。
当然,搭建这套体系我也踩了不少坑。下面分享我总结的最佳实践和避坑指南。
坑一:GStack 太大,AI 注意力分散
刚开始我把所有规范写在一个 GStack 里,结果 Claude 经常遗漏关键点。后来发现 Anthropic 官方博客提到:上下文编辑可以"自动清理过期内容,保留对话流程"。我悟了——GStack 也要保持单一职责。
解决:拆分成小模块,每个 GStack 只解决一类问题。基础规范、技术栈、项目特定、任务模板,各司其职。
坑二:变量命名混乱,团队协作困难
早期我随意命名变量,结果团队成员看不懂我的 GStack。后来我们建立了命名规范文档,统一使用 env、module、feature 等标准变量名。
解决:把 GStack 纳入版本控制,建立团队规范文档,定期 Review。
坑三:GStack 过时,代码质量下降
项目迭代过程中,技术栈和规范会变化,但 GStack 没同步更新,导致 Claude 生成的代码不符合最新标准。
解决:把 GStack 更新纳入迭代流程,每次技术栈变更都同步更新对应的 GStack。
最佳实践总结:
正如 Garry Tan 所说:"AI 编程在模拟工程团队结构时效果最佳。"好的 GStack 体系,就是让你的 AI 助手真正融入团队工作流。
根据 Anthropic 的测试,合理的上下文管理能让 Claude Code 性能提升 39%,token 消耗减少 84%。这不仅仅是效率的提升,更是开发体验的质变——从"反复解释"到"默契配合"。
回顾开头那个重复输入项目背景的场景,我现在觉得当时的自己确实有点傻——明明可以一键搞定的事,为什么要手动重复 17 次?
GStack 让 Claude Code 从一个"需要反复解释的实习生"变成了"懂你的老搭档"。花一小时搭建 GStack 体系,每天省下的时间够你喝好几杯咖啡,还能早点下班。
如果你还在重复输入项目背景、技术栈、代码规范,那今天就是最好的开始时机。为你的后端项目设计第一个 GStack,感受 AI 编程的真正效率。
💬 来聊聊:你在 Claude Code 里重复输入最多的是什么?是项目背景、技术栈,还是代码规范?评论区分享你的经历,说不定我能帮你设计一个 GStack 解决它。
⭐ 收藏备用:本文的 GStack 示例可以直接复制使用,建议收藏,搭建时回来对照。
👍 点赞支持:如果这篇文章对你有帮助,点个赞让更多人看到。我会继续分享更多 AI 编程实战技巧,包括 MCP 工具集成、Claude Code 高级用法等。
参考资料: