You can use Unix Domain Socket aka AF_UNIX for your interprocess communication. Previously, It was only available in a Linux/Unix operating system until Microsoft added it in Microsoft Windows in the beginning of Insider build 17063.
It offers better throughput and improved security
package main import ( "log" "net" "net/http" "os" "os/signal" "syscall" ) func main() { socketPath := "uds.sock" socket, err := net.Listen("unix", socketPath) if err != nil { log.Fatal(err) } c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, syscall.SIGTERM) go func(p string) { <-c if err := os.Remove(p); err != nil { os.Exit(1) } os.Exit(0) }(socketPath) m := http.NewServeMux() m.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("GET...")) }) m.HandleFunc("POST /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("POST...")) }) m.HandleFunc("PUT /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("PUT...")) }) m.HandleFunc("DELETE /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("DELETE...")) }) if err := http.Serve(socket, m); err != nil { log.Fatal(err) } } Source Code https://github.com/johnpili/go-using-unix-domain-socket