A collection of daily coding challenges designed to help you master idiomatic Go through deliberate, repetitive practice.
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 7 个月前 | ||
| 7 个月前 | ||
| 5 个月前 | ||
| 7 个月前 | ||
| 5 个月前 | ||
| 7 个月前 | ||
| 7 个月前 | ||
| 7 个月前 | ||
| 7 个月前 | ||
| 7 个月前 | ||
| 7 个月前 | ||
| 7 个月前 | ||
| 7 个月前 | ||
| 7 个月前 | ||
| 7 个月前 |
以下内容由 AI 翻译,如有问题请 点此提交 issue 反馈
🥋 Go Katas 🥋
"我不怕练过一万种腿法的人,只怕一种腿法练过一万次的人。"
(李小龙)
项目目标
-
Go 语言入门简单,但精通不易。"能运行的代码"与"符合 Go 风格的代码"之间的差距,往往体现在安全性、内存效率和并发控制等细节上。
-
本仓库是一系列 每日编程练习(Daily Katas) 的集合:这些小型独立的编码挑战旨在帮助你通过刻意练习,将特定的 Go 模式内化为肌肉记忆。
非项目目标
-
本项目不旨在教授编程基础,也不将 Go 作为通用学习工具。它也不打算全面教授 Go 语言。
-
重点应尽可能放在挑战自己,以Go 的方式解决常见的软件工程问题。
-
许多经验丰富的开发者花费数年时间在生产级环境中学习和应用最佳实践。当他们决定转向 Go 时,通常会面临两个挑战:
-
有没有一种方法可以迁移已有知识,这样我就不必抛弃多年经验从零开始?
-
如果可以,我应该重点关注哪些方面,以识别知识体系中的不匹配之处,并在 Go 生态系统中以预期的方式使用它们?
-
如何使用本仓库
- 选择一个练习: 进入任意
XX-kata-yy文件夹。 - 阅读挑战: 打开该文件夹内的
README.md。其中定义了目标、约束条件以及你必须使用的"惯用模式"。 - 解决问题: 在文件夹内初始化一个模块并编写你的解决方案。
- 反思总结: 将你的解决方案与提供的"参考实现"(如有)或列出的核心模式进行比较。
贡献指南
请参考 CONTRIBUTING 文件
Katas 索引(分组)
01) 上下文、取消与快速失败并发
防止资源泄漏、实施背压并在取消时快速失败的实际并发模式。
- 01 - 快速失败数据聚合器
- 03 - 优雅关闭服务器
- 05 - 上下文感知错误传播器
- 07 - 限流扇出客户端
- 09 - 缓存击穿防护(singleflight TTL)
- 10 - 带背压和 errors.Join 的工作池
- 14 - 无泄漏调度器
- 17 - 上下文感知通道发送器(无泄漏生产者)
02) 性能、内存分配与吞吐量
专注于内存效率、分配控制和高吞吐量数据路径的练习。
03) HTTP 与中间件工程
符合 Go 惯用法的 HTTP 客户端/服务器模式、中间件组合和生产环境最佳实践。
04) 错误处理:语义、包装与边界情况
现代 Go 错误处理:重试、清理、包装以及常见陷阱。
05) 文件系统、打包与部署优化
可移植二进制文件、可测试的文件系统代码以及开发/生产环境一致性。
06) 测试与质量保障
Go 惯用测试方法:表驱动测试、并行测试和模糊测试。