Using the net/http package in go

When I started picking up the go language years ago, things that stood out to me immediately were the io and net/http packages. Both of those packages were extremely well done and minimal in the amount of interfaces they exposed to the user.

What I love about net/http

The two things which stand out for me are:

  1. Interface Design.

Interface Design

The primary constructs you’ll interact with are pretty limited:

To build your service:


To handle requests:


To build a client:


In total, we’re looking at 7 core primitives to build a client and server — which isn’t a lot!


When it comes to building HTTP services, the main things users need likely fall into two buckets:

  1. Defining what handlers to run based on a method, or path.

Here’s an example showing this composability in action [1] [2]:

  • In this miniature example, we can see that the authenticate middleware is doing authentication for us.

Testing your service

From this example, testing your service would be pretty straightforward:


As we can see, getting started with the net/http package is extremely simple but packs a lot of punch.

In a followup article, I’ll share more about using http.Client as the unit of integration for building HTTP clients.


  • [1]: For brevity, we’ve chosen to use http.HandlerFunc in our code example, but in practice, or in production, we’d always want to use http.Handler since we can convert an http.HandlerFunc to it easily.

software engineer at auth0, writing code for humans, with humans.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store