FREE coding exercises for budding gophers


Gophercises is free, but you need to provide a working email address to gain access. I won't spam you and unsubscribing is very easy.

We've all been there before...

You are just starting to pick up a new programming language (like Go!) and things are going great. The tutorials are clicking and you are making great progress... and then you run out of tutorials.


"What should I build next?" you ask, and inevitably everyone tells you to "Pick a side project and work on it!"


Great, but what side project should you work on?

What project will provide you with the best learning experience?

What happens if you pick something too challenging and get stuck?


Nothing sucks more than getting stuck because you didn't know you were tackling a nearly impossible problem, and when you are just getting started how are you supposed to know what those are?


Now take a deep breath and imagine having the confidence to evaluate a project and determine if it was within your grasp.

Imagine knowing that even if you have never used a library before, you will be able to figure it out by reading through the docs.


You can get there, but to do it you need to practice. You need to find projects that will challenge you, but won't leave you clueless about how to proceed.


Enter Gophercises!


Gophercises is a FREE course that will help you become more familiar with Go while developing your skills as a programmer. In the course we will build roughly 20 different mini-applications, packages, and tools that are each designed to teach you something different.


In the course we will learn about and practice using:

  • Channels
  • Mutexes
  • Goroutines
  • Functional Options
  • Chaining Interfaces
  • Various parts of the standard library (io, time, and many other packages)
  • Reading input from the command line
  • And much much more!

By completing the exercises in Gophercises you will slowly become more confident using the Go programming language. You will start to learn how to read the standard docs and make sense of them. You will even start to learn how to evaluate the difficulty of a project before doing much coding. In short, you will start to become a great Go developer.


Ready to start working out with Go?


Gophercises is FREE, but you need to provide a working email address to gain access. I won't spam you and unsubscribing is very easy.

What will we be building?

Note: Sign up to get immediate access to the course and all of the published exercises.

Exercise 1

Quiz Game

Preview image
Create a program to run timed quizes via the command line.

Exercise 2

URL Shortener

Preview image
Code an http.Handler that forwards paths to other URLs (similar to Bitly).

Exercise 3

Choose Your Own Adventure

Preview image
Design a choose your own adventure book renderer that shows the story via a web application.

Exercise 4

HTML Link Parser

Preview image
Build a package to parse links (<a> tags) from an HTML file.

Exercise 5

Sitemap Builder

Preview image
Use the HTML link parser from ex. 4 to build a sitemap of public websites.

Exercise 6

Hacker Rank Problem

Preview image
Code the solutions to a few string-related hacker rank problems.

Exercise 7

CLI Task Manager

Preview image
Create a command line app to manage a TODO list stored in BoltDB.

Exercise 8

Phone Number Normalizer

Preview image
Write a program that will normalize an SQL table of phone numbers into a single format.

Exercise 9

Deck of Cards

Preview image
Code a package used to build decks of cards with custom options, shuffling, and sorting.

Exercise 10

Blackjack

Preview image
Using the deck of cards in ex. 9, create a blackjack game.

Exercise 11

Blackjack AI

Preview image
Refactor the blackjack exercise into a package with an exported AI anyone can implement to create a bot that plays blackjack in a simulated game.

Exercise 12

File Renaming Tool

Preview image
Build a tool used to rename files with a common pattern. Eg we might want to take many files with names like "Dog (1 of 100).jpg", "Dog (2 of 100).jpg", ... and rename them to "Dog_001.jpg", "Dog_002.jpg", ...

Exercise 13

Quiet HN

Preview image
Given an existing web application that displays stories from Hacker News, we will look at ways to add concurrency and caching to the application while looking for race conditions and other potential issues.

Exercise 14

Recover Middleware

Preview image
Build HTTP middleware that will recover from any panics in an application, even if the response write has been partially written to, and then output the stack trace if the application is in development mode.

Exercise 15

Recover Middleware w/ Source Code

Preview image
Expand upon the recover middleware and add links to source code along with syntax highlighting of the source code in order to make a useful development tool.

Exercise 16

Twitter Retweet Contest CLI

Preview image
Create a CLI to help run a Twitter contest where users retweet a tweet for entry, and after some time you pick one or more of the users who retweeted as the winner.

Exercise 17

Secrets API and CLI

Preview image
Create a package that handles storing and retrieving encrypted secrets like API keys. Then use that package to create a CLI that can be used to set and get secrets stored in a file in your home directory.

Exercise 18

Image Transform Service

Preview image
Create a web server where a user can upload an image and then go through a guided process of choosing various image transformation options they prefer to get a final version of their image.

Exercise 19

Building Images (png & svg)

Preview image
Learn to create images in your Go code. First we use the standard library to build a simple PNG bar chart, then we explore how to use an awesome third party library to create a much more complex and compelling chart in SVG format.

Exercise 20

Building PDFs

Preview image
In this exercise we learn to create almost any PDF in Go. We start off by building an invoice with a dynamic set of line items, and then we move on to creating a course completion certificate for the Gophercises course!
I'm ready to exercise my Go skills.

If not, what can I do to convince you? Let me know!

About the author

Jon Calhoun is a full stack web developer who teaches about Go, web development, algorithms, and anything else he finds interesting.

Jon has been a guest on Go Time, a popular Go podcast, and also spoke at GothamGo 2018 about building this course and focusing on simplicity in our Go applications.

Previously, Jon founded EasyPost, a shipping API that many fortune 500 companies use to power their shipping infrastructure, and he worked at Google as a software engineer.

You can find more of Jon's work (both free and paid) below:


Calhoun.io - Jon's blog, which covers a wide variety of topics related to Go including the popular series, Using PostgreSQL with Go. All articles here are free, and are mostly text-based.

Web Development with Go - This paid course spans over 33 hours of screencasts where Jon teaches web development using Go. The course covers everything from just getting started to deploying a real, production-grade web application.

Let's Learn Algorithms - This free series covers various computer science algorithms and data structures, along with examples of how to code them in Go. Most of these articles are accompanied with screencast videos hosted on Jon's YouTube channel.

A picture of the author - Jon Calhoun

Photo compliments of Calhoun Photography.