关于 go-practice
此 Go 学习技能会生成自适应练习、评审解答,并在指定练习仓库中记录进度,面向从语言基础到后端、命令行、云原生和分布式系统的学习者。
主要功能
- 01按模式生成练习
- 02根据学习日志调整难度
- 03覆盖 Go 基础及应用领域
- 04通过格式化和测试验证练习
- 05评审解答并更新学习记录
适用场景
- 01练习 Go 并发或接口
- 02准备后端或命令行开发
- 03提升 Kubernetes 和 CNCF 项目能力
- 04评审练习并规划后续学习
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nrayyagari/ go-practice-skill --skill go-practice安装后在 Claude Code 中输入/go-practice确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.gitignoreREADME.mdevals/prompts.mdreferences/adaptive-learning.mdreview-guide.mdexercise-templates.mdlearning-log.mdpractice-tracks.mdtopic-catalog.md详细介绍
Go 练习 — 自适应云原生学习
生成 Go 练习,先培养实用的语言熟练度,再将其应用于后端、CLI、云工具、CI/CD 系统、Kubernetes/CNCF 项目和分布式系统开发。
重心是熟练掌握 Go,从而能够用 Go 构建任何东西。Kubernetes/CNCF 是优先考虑的专业方向,但并非唯一选择。
每个常规练习请求都会生成 3 道练习,根据主题分别保存为 .go 文件或小型 Go 模块。根据用户的学习记录,混合安排代码补全、调试和设计任务。
用户的所有练习都放在以下固定仓库中:
/home/laborant/repos/go-practice
除非用户明确指定其他路径,否则不要在其他位置创建 Go 练习。
以 Go by Example 和 Go 官方文档为基础资料:
- Go by Example:涵盖语法、并发、测试、CLI、HTTP、文件、context 和进程处理的简洁可运行示例。
- A Tour of Go:语言基础、方法/接口、泛型和并发基础。
- Effective Go:惯用写法,包括
gofmt、简短命名、包命名、小型接口、明确处理错误和简单的控制流。
适用场景
- 用户想练习 Go、做 Go 练习或挑战,或进行 Go 代码审查。
- 用户询问 goroutine、channel、context、接口、错误、模块、测试、HTTP 服务、CLI、Kubernetes 控制器、operator、CI/CD 工具、云 API 或 Go 分布式系统。
- 用户想学习后端 Go、提升 Go 实践能力、为参与 CNCF 项目做好准备,或准备为 Go 开源项目贡献代码。
- 用户在解答 Go 练习时说“我卡住了”“审查我的解法”“提高/降低难度”,或提出澄清问题。
工作流
步骤 1:主题缺失时询问主题
如果用户没有指定主题,请提供以下菜单:
Which Go area do you want to practice?
1. Foundations — syntax, slices, maps, structs, methods, interfaces, errors
2. Concurrency — goroutines, channels, select, context, cancellation, worker pools
3. Backend Go — HTTP servers, middleware, JSON, validation, persistence boundaries
4. Kubernetes/CNCF — clients, controllers, reconcilers, CRDs, informers, operators
5. CI/CD + CLIs — command-line tools, config, env vars, process execution, test runners
6. Distributed Go — retries, idempotency, rate limits, queues, leases, observability
Pick one, or name a specific thing like "context cancellation" or "Kubernetes reconciler".
用户直接指定主题时,跳过此步骤。
步骤 2:选择学习模式
如果用户没有指定模式,使用 batch。
模式:
batch:3 道练习。适用于常规练习。drill:围绕一个概念或反复出现的错误设计 1 个小型专项任务。debug:包含测试的、贴近生产环境的错误代码。applied:贴近实际的后端、CLI、云或 CNCF 任务。pr-simulation:阅读一个小型现有包,修复错误并说明权衡。design-review:编码前先确定包的边界、接口和失败处理方式。capstone:根据综合项目进阶路线完成多步骤项目。
根据模式控制任务范围。用户要求小型专项练习、代码审查或项目式任务时,不要强行安排 3 道练习。
步骤 3:准备练习工作区
使用 /home/laborant/repos/go-practice 作为练习仓库。
如果该仓库不存在,则创建一个 Git 仓库,并包含:
README.mdlearning-log.md.gitignore
创建练习时,将其放入该仓库下按日期命名的文件夹中。文件夹名称格式如下:
D-mmm-YY
示例:
3-may-2630-apr-2612-jun-26
月份使用小写的英文缩写:jan、feb、mar、apr、may、
jun、jul、aug、sep、oct、nov、dec。
规则:
- 新的一天开始时,为当天创建文件夹。
- 如果用户当天要求增加练习,将新练习添加到同一个文件夹中。
- 在该文件夹已有练习的编号后继续编号。
- 将根目录下的
learning-log.md作为跨日期的持久记录。 - 在有用时阅读较早日期的文件夹,尤其是学习记录中提及这些文件夹时。
- 除非用户要求不提交,否则将新增练习提交到
go-practice仓库。
步骤 4:阅读学习背景
如果 /home/laborant/repos/go-practice/learning-log.md 存在,则打开;否则
从 references/learning-log.md 复制初始模板。
检查:
- 反复出现的错误
- 用户经常提出的澄清问题
- 已经熟练掌握的概念
- 领域目标和当前重点
- 上一批练习
- 之前按日期命名的练习文件夹
如果用户正在某个特定练习目录中工作,优先查看该练习目录下的本地笔记,但仍要更新根目录中的 learning-log.md。
不要使用进度跟踪脚本。在评审后以及用户提出重要澄清问题后,直接更新学习日志。
步骤 5:选择难度和领域
使用 references/topic-catalog.md。
当用户希望朝后端、CLI/工具、云、分布式系统、Kubernetes、CNCF 或综合项目方向发展时,使用 references/practice-tracks.md。
默认进度:
- 难度 1/5:语言核心知识和小型单文件任务
- 难度 2/5:包边界、测试、错误、上下文、接口,以及小型 CLI/服务
- 难度 3/5:包含并发、API 边界和故障模式的真实后端/CNCF 任务
- 难度 4/5:参照 Kubernetes/CNCF 模式设计的项目型任务
- 难度 5/5:包含分阶段测试和生产约束的综合项目型模块
根据学习日志进行调整:
- 反复出现语法或类型方面的困惑 -> 降低难度,聚焦单一概念。
- 反复提出“为什么要用这个接口?” -> 加入设计说明和以接口为重点的任务。
- 反复对并发感到困惑 -> 加入时间线注释、取消路径和竞态检查。
- 基础扎实 -> 转向后端、CNCF 和分布式系统练习。
- 用户要求挑战 -> 选择难度 3/5 或 4/5,并加入测试和真实约束。
步骤 6:生成练习
创建文件前,先阅读 references/exercise-templates.md。
默认一批练习:
- 1 道补全练习
- 1 道调试练习
- 1 道带测试的云原生/后端设计练习
调整练习组合:
- 如果用户在处理 bug 时遇到困难 -> 安排 2 道调试练习。
- 如果用户提出很多澄清问题 -> 安排 1 道概念训练、1 道引导式补全和 1 道应用任务。
- 如果用户水平较高 -> 安排 3 道涵盖后端/CNCF/分布式系统的应用任务。
按模式生成:
drill:1 个文件和测试。debug:1 个有问题的文件和测试,或在一个聚焦的包中设置 3 个 bug。applied:1 个带 README 和测试的小型模块。pr-simulation:1 个带失败测试和评审提示的、符合现有风格的小型包。design-review:Markdown 提示;仅在有用时提供骨架包。capstone:包含 README、分阶段测试和学习日志检查点的模块。
文件命名:
NN_<topic>_<subtopic>_<type>.go
NN_<topic>_<subtopic>_<type>_test.go
每个日期文件夹中的 NN 从 01 开始。如果日期文件夹中已有练习,则从现有最大编号继续。
对于模块级练习,创建:
<date-folder>/NN_<topic>_<subtopic>/
go.mod
README.md
<package>.go
<package>_test.go
每个练习都应包含:
- 简短的头部注释,标明主题、难度、领域和灵感来源。
- 明确的目标。
- 补全任务使用
TODO标记;调试任务使用BUG标记。 - 初始状态下会失败的测试。
- 适用时采用真实的后端/CNCF 场景。
- 注释中不隐藏答案。
- 除非用户明确要求,否则不提供完整解决方案。
优先使用标准库。只有在练习确实需要时才使用 Kubernetes 或 CNCF 库;否则,通过小型接口模拟边界,以简化环境配置。
步骤 7:验证练习能按预期失败
运行:
gofmt -w .
go test ./...
预期:生成的练习应因用户尚未完成任务而失败。 如果任何练习在用户编辑前就能通过,则明确指出缺少的工作并重新运行。
对于没有测试的单文件 package main 练习,运行:
go run <file>.go
根据练习布局,从日期文件夹或特定模块文件夹中运行命令。尽可能优先使用 go test,因为后端/CNCF 工作需要快速、可重复的测试。
步骤 8:交付给用户
使用以下结构:
Created <count> Go exercise(s) on <topic> at Difficulty <N>/5.
Focus:
- <why these exercises were selected from learning-log.md>
Files:
- <path> — <one-line task>
- <path> — <one-line task>
- <path> — <one-line task>
Run: cd /home/laborant/repos/go-practice/<date-folder> && go test ./...
Send me your solution when ready.
步骤 9:评审用户的解决方案
当用户要求评审时:
- 运行
gofmt -w .。 - 运行
go test ./...。 - 对于并发练习,运行
go test -race ./...。 - 阅读
references/review-guide.md。 - 先评审正确性,再评审 Go 惯用写法,最后评审后端/CNCF 生产环境相关问题。
评审应指出:
- 测试通过或失败的情况
- Bug 或边缘情况
- Go 惯用写法方面的改进
- 错误处理和 context 行为
- API 边界和接口大小
- 并发安全性
- 与后端/CNCF 工作的生产相关性
步骤 10:更新学习日志
每次评审后,手动更新 /home/laborant/repos/go-practice/learning-log.md。
记录:
- 日期文件夹
- 已完成的练习
- 观察到的错误
- 提出的澄清问题
- 已掌握得更牢固的概念
- 仍较薄弱的概念
- 建议的下一批练习
错误示例:
nil-map-writeslice-aliasingloop-variable-capturepointer-vs-value-receiverinterface-too-largeignored-errorcontext-not-propagatedgoroutine-leakchannel-close-owned-by-receiverdata-racetest-flakinesskubernetes-reconcile-not-idempotentretry-without-backoffmissing-timeout
澄清问题示例:
- “何时应该使用指针接收者?”
- “为什么要把 context 放在第一个参数?”
- “谁来关闭这个 channel?”
- “为什么要在使用方包中定义接口?”
- “怎样的协调器才是幂等的?”
- “何时应该模拟 Kubernetes 客户端行为?”
使用这些记录调整后续练习批次。
如果同一类别的澄清问题出现两次,下一批练习必须包含一个能迫使用户辨别两者的对比练习。示例:
- 接收者选择问题反复出现 -> 安排指针接收者与值接收者的对比任务。
- context 问题反复出现 -> 加入取消和超时行为。
- channel 所有权问题反复出现 -> 加入生产者/消费者的关闭规则。
- 接口定义位置问题反复出现 -> 加入由使用方拥有的接口设计。
- 协调器问题反复出现 -> 加入期望状态与观测状态以及幂等性。
步骤 11:交互式帮助
- “我卡住了” -> 提供提示,而不是解决方案。提示应结合此前的错误。
- “给我看解决方案”或明确的同类请求 -> 提供最精简的完整解决方案,并解释关键思路。
- “解释这个概念” -> 用一个简短的 Go 示例和一个云原生用例来解释。
- “为什么做这个练习?” -> 指出学习日志中的规律和目标领域。
- “增加难度” -> 添加有关取消、竞态安全、幂等性或边缘情况的测试。
- “降低难度” -> 聚焦单一概念,并移除外部依赖。
- “按 CNCF 代码的标准评审” -> 强调 API 边界、context、日志、测试和故障模式。
- “为 Kubernetes 项目做准备” -> 使用协调器、客户端、缓存、informer 和 CRD 结构的练习。
- “帮我用 Go 构建任何东西” -> 轮换练习基础知识、包、测试、后端、CLI/工具、并发和应用项目。
进阶项目阶梯
当用户想进行项目式练习,或已成功完成多个练习批次时,提供进阶项目。
go-toolbox:小型 CLI 工具,用于解析标志、环境变量、JSON、类 YAML 结构体、文件和退出码。backend-health-api:HTTP 服务,包含处理器、验证、超时、优雅关闭和表格驱动测试。ci-job-runner:并发任务运行器,包含 context 取消、日志、构件、重试和确定性测试。cloud-resource-sync:期望状态/观测状态同步循环,包含幂等性、补丁规划和重试/退避。mini-controller:Kubernetes 结构的协调器,包含队列、状态条件、类似 finalizer 的清理操作,以及具备竞态安全性的工作线程。
进阶项目应足够小,便于逐步完成。每个阶段都应有测试和学习日志检查点。
开源就绪度
当学习日志显示你已反复成功掌握以下内容时:
- 接口和包边界
- 上下文取消和超时
- 错误包装和可观测性
- 表驱动测试
- 无竞态并发
- 幂等的协调循环
- CLI/后端易用性
建议阅读并修改 CNCF Go 仓库中的小问题。先从 docs/tests/internal 包入手,再接触控制器或分布式路径。