Requirements
Before you start this course, make sure you’ve read and followed all of the instructions in the prep document. This will get you set up and explain how to work through the projects.
Remember: you can always Google or ask for help if you get stuck.
Projects
This course is structured into self-contained projects that you can work through at your own pace.
Each project has its own directory with a README.md file that has instructions. If you want to take a look at one way of completing an exercise, there’s some code waiting on a branch prefixed impl/
(short for “implementation”) and an associated Pull Request for you to look at. Try not to copy!
Most exercises finish with a list of optional extension tasks. It’s highly recommended that you try them out. Note that often the extensions are open-ended and under-specified - make sure to think about them with a curious mind: Why are they useful? What trade-offs do they have?
- Output and Error Handling
An introduction to how to handle errors in Go, and how to present information to users of programs run on the command line. - CLI & Files
An introduction to building things with Go by replicating the unix toolscat
andls
. - Interfaces
An introduction to interfaces in Go. - File Parsing
Practice parsing different formats of files, both standard and custom. - Concurrency
Put synchronisation primitives into action by building a thread-safe cache. - Servers & HTTP requests
Learn about long-running processes, HTTP andcurl
- Servers & Databases
Build a server that takes data from a database and serves it injson
format - Multiple Servers
Build and run file & API servers behind nginx in a simple multi-server architecture - Docker & Cloud Deployment
Use containers to reproducibly deploy applications into the cloud - gRPC
Learn about RPCs and how they differ from REST, and start thinking about observability - Batch Processing
Build an image processing pipeline with cloud storage - Buggy App
Run, debug, and fix a buggy application - Memcache
Explore sharding and replication of state - Kafka Cron
Build a distributed multi-server application handling variable load, with Kafka as a task queue - RAFT and OTel
Build a complex distributed system for with strong consistency, and instrument it with tracing