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", 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/mysocketSee ParseURI and ListenURI for more info.
Inspiration taken from, and thanks given to, both tv42/httpunix and agorman/httpunix.