"I fear not the man who has practiced 10,000 kicks once, but I fear the man who has practiced one kick 10,000 times."
(Bruce Lee)
-
Go is simple to learn, but nuanced to master. The difference between "working code" and "idiomatic code" often lies in details such as safety, memory efficiency, and concurrency control.
-
This repository is a collection of Daily Katas: small, standalone coding challenges designed to drill specific Go patterns into your muscle memory.
-
This is not intended to teach coding, nor to use Go as a general-purpose learning vehicle. It is not intended to teach Go in general.
-
The focus should be, as much as possible, on challenging oneself to solve common software engineering problems the Go way.
-
Several seasoned developers spend years learning and applying best practices in production-grade contexts. When they decide to switch to Go, they often face two challenges:
-
Is there a way to transfer knowledge so that I don’t have to throw away years of experience and start from zero?
-
If yes, which parts should I focus on to recognize mismatches and use them the expected way in the Go ecosystem?
-
- Pick a Kata: Navigate to any
XX-kata-yyfolder. - Read the Challenge: Open the
README.mdinside that folder. It defines the goal, the constraints, and the "idiomatic patterns" you must use. - Solve It: Initialize a module inside the folder and write your solution.
- Reflect: Compare your solution with the provided "Reference Implementation" (if available) or the core patterns listed.
Please refer to the CONTRIBUTING file
Real-world concurrency patterns that prevent leaks, enforce backpressure, and fail fast under cancellation.
Drills focused on memory efficiency, allocation control, and high-throughput data paths.
Idiomatic HTTP client/server patterns, middleware composition, and production hygiene.
Modern Go error handling: retries, cleanup, wrapping, and infamous pitfalls.
Portable binaries, testable filesystem code, and dev/prod parity.
Idiomatic Go testing: table-driven tests, parallelism, and fuzzing.