Unixtransport
Support for Unix domain sockets in Go HTTP clients
Install / Use
/learn @peterbourgon/UnixtransportREADME
unixtransport

This package adds support for Unix sockets to Go HTTP clients and servers.
Clients
Register the Unix protocol in the default HTTP client transport like this:
unixtransport.RegisterDefault()
Now you can make HTTP requests with URLs like this:
resp, err := http.Get("http+unix:///path/to/socket:/request/path?a=b#fragment")
Use scheme http+unix or https+unix, and use : to separate the socket file
path (host) from the URL request path.
See e.g. Register and RegisterDefault for more info.
Servers
If you have this:
fs := flag.NewFlagSet("myserver", flag.ContinueOnError)
addr := fs.String("addr", ":8080", "listen address")
...
http.ListenAndServe(*addr, nil)
You can change it like this:
fs := flag.NewFlagSet("myserver", flag.ContinueOnError)
addr := fs.String("addr", ":8080", "listen address")
...
-http.ListenAndServe(*addr, nil)
+ln, err := unixtransport.ListenURI(context.TODO(), *addr)
+// handle err
+http.Serve(ln, nil)
Which lets you specify addrs like this:
myserver -addr=:8080 # equivalent to `tcp://:8080`
myserver -addr=tcp://:8080 # listen on all interfaces, TCP port 8080
myserver -addr=udp://0.0.0.0:12345 # listen on all IPv4 interfaces, UDP port 12345
myserver -addr=unix:///tmp/mysocket # listen on Unix socket path /tmp/mysocket
See ParseURI and ListenURI for more info.
Acknowledgements
Inspiration taken from, and thanks given to, both tv42/httpunix and agorman/httpunix.
