mcpField
G
go-practice

go-practice

github.com/nrayyagari开发076 次安装28 周前更新
代码仓库

关于 go-practice

此 Go 学习技能会生成自适应练习、评审解答,并在指定练习仓库中记录进度,面向从语言基础到后端、命令行、云原生和分布式系统的学习者。

主要功能

  1. 01按模式生成练习
  2. 02根据学习日志调整难度
  3. 03覆盖 Go 基础及应用领域
  4. 04通过格式化和测试验证练习
  5. 05评审解答并更新学习记录

适用场景

  1. 01练习 Go 并发或接口
  2. 02准备后端或命令行开发
  3. 03提升 Kubernetes 和 CNCF 项目能力
  4. 04评审练习并规划后续学习

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/nrayyagari/go-practice-skill --skill go-practice

安装后在 Claude Code 中输入/go-practice确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.gitignore
README.md
evals/
prompts.md
references/
adaptive-learning.md
review-guide.md
exercise-templates.md
learning-log.md
practice-tracks.md
topic-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.md
  • learning-log.md
  • .gitignore

创建练习时,将其放入该仓库下按日期命名的文件夹中。文件夹名称格式如下:

D-mmm-YY

示例:

  • 3-may-26
  • 30-apr-26
  • 12-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-write
  • slice-aliasing
  • loop-variable-capture
  • pointer-vs-value-receiver
  • interface-too-large
  • ignored-error
  • context-not-propagated
  • goroutine-leak
  • channel-close-owned-by-receiver
  • data-race
  • test-flakiness
  • kubernetes-reconcile-not-idempotent
  • retry-without-backoff
  • missing-timeout

澄清问题示例:

  • “何时应该使用指针接收者?”
  • “为什么要把 context 放在第一个参数?”
  • “谁来关闭这个 channel?”
  • “为什么要在使用方包中定义接口?”
  • “怎样的协调器才是幂等的?”
  • “何时应该模拟 Kubernetes 客户端行为?”

使用这些记录调整后续练习批次。

如果同一类别的澄清问题出现两次,下一批练习必须包含一个能迫使用户辨别两者的对比练习。示例:

  • 接收者选择问题反复出现 -> 安排指针接收者与值接收者的对比任务。
  • context 问题反复出现 -> 加入取消和超时行为。
  • channel 所有权问题反复出现 -> 加入生产者/消费者的关闭规则。
  • 接口定义位置问题反复出现 -> 加入由使用方拥有的接口设计。
  • 协调器问题反复出现 -> 加入期望状态与观测状态以及幂等性。
步骤 11:交互式帮助
  • “我卡住了” -> 提供提示,而不是解决方案。提示应结合此前的错误。
  • “给我看解决方案”或明确的同类请求 -> 提供最精简的完整解决方案,并解释关键思路。
  • “解释这个概念” -> 用一个简短的 Go 示例和一个云原生用例来解释。
  • “为什么做这个练习?” -> 指出学习日志中的规律和目标领域。
  • “增加难度” -> 添加有关取消、竞态安全、幂等性或边缘情况的测试。
  • “降低难度” -> 聚焦单一概念,并移除外部依赖。
  • “按 CNCF 代码的标准评审” -> 强调 API 边界、context、日志、测试和故障模式。
  • “为 Kubernetes 项目做准备” -> 使用协调器、客户端、缓存、informer 和 CRD 结构的练习。
  • “帮我用 Go 构建任何东西” -> 轮换练习基础知识、包、测试、后端、CLI/工具、并发和应用项目。

进阶项目阶梯

当用户想进行项目式练习,或已成功完成多个练习批次时,提供进阶项目。

  1. go-toolbox:小型 CLI 工具,用于解析标志、环境变量、JSON、类 YAML 结构体、文件和退出码。
  2. backend-health-api:HTTP 服务,包含处理器、验证、超时、优雅关闭和表格驱动测试。
  3. ci-job-runner:并发任务运行器,包含 context 取消、日志、构件、重试和确定性测试。
  4. cloud-resource-sync:期望状态/观测状态同步循环,包含幂等性、补丁规划和重试/退避。
  5. mini-controller:Kubernetes 结构的协调器,包含队列、状态条件、类似 finalizer 的清理操作,以及具备竞态安全性的工作线程。

进阶项目应足够小,便于逐步完成。每个阶段都应有测试和学习日志检查点。

开源就绪度

当学习日志显示你已反复成功掌握以下内容时:

  • 接口和包边界
  • 上下文取消和超时
  • 错误包装和可观测性
  • 表驱动测试
  • 无竞态并发
  • 幂等的协调循环
  • CLI/后端易用性

建议阅读并修改 CNCF Go 仓库中的小问题。先从 docs/tests/internal 包入手,再接触控制器或分布式路径。

评论

支持 Markdown