This package adds support for Unix sockets to Go HTTP clients and servers.
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.
If you have this:
fs := flag.NewFlagSet("myserver")
addr := fs.String("addr", ":8080", "listen address")
...
http.ListenAndServe(*addr, nil)
You can change it like this:
fs := flag.NewFlagSet("myserver")
addr := fs.String("addr", ":8080", "listen address")
...
-http.ListenAndServe(*addr, nil)
+ln, err := ListenURI(context.TODO(), *addr)
+// handle err
+http.Serve(ln, nil)
Which lets you specify addrs like this:
myserver -addr=unix:///tmp/mysocket
See e.g. ParseURI and ListenURI for more info.
Inspiration taken from, and thanks given to, both tv42/httpunix and agorman/httpunix.