func dpsRouter(w http.ResponseWriter, r *http.Request) {
	p := strings.Trim(r.URL.Path, "/")
	if (0 == len(p)) {
		var html = "<html><head><title>httpubsub</title></head><body><h1>httppubsub</h1><p>Specify a path to Publish or Subscibe to</p><pre>curl http://localhost:8080/sub123\n  ** waiting **</pre><p>Then in another terminal:</p><pre>curl -X POST http://localhost:8080/sub123</pre><p>And watch the subscribe side emit any posted data</p>"
		w.Write([]byte(html))
		return
	}
	switch r.Method {
	case "GET":
		sub(w, r, p)
		break
	case "POST":
		pub(w, r, p)
		break
	default:
		break
	}
}
Route the Path to a Channel via Map
package main
import (
	"flag"
	"fmt"
	"io/ioutil"
	"math/rand"
	"net/http"
	"strings"
	"time"
	"github.com/oklog/ulid"
)
func create_ulid() string {
	t := time.Now()
	entropy := ulid.Monotonic(rand.New(rand.NewSource(t.UnixNano())), 0)
	u, _ := ulid.New(ulid.Timestamp(t), entropy)
	return u.String()
}
type PS_Client struct {
	id   string
	pump chan []byte
}
var pubsub_channel_list = New_PubSub_Channel_List()  
func pub(w http.ResponseWriter, r *http.Request, p string) {
	fmt.Printf("pub(w, r, %s)\n", p)
	ch, err := pubsub_channel_list.Find(p)
	if err != nil {
		w.Write([]byte("No Subscribers\n"))
		return
	}
	body, err := ioutil.ReadAll(r.Body)
	if err != nil {
		w.Write([]byte("Read Error"))
		return
	}
	ch.Send(body);
}
func sub(w http.ResponseWriter, r *http.Request, p string) {
	fmt.Printf("sub(w, r, %s)\n", p)
	ch, _ := pubsub_channel_list.Find(p)
	if "" == ch.id {
		ch = pubsub_channel_list.Create(p)
	}
	ch.Sub(w)
	fmt.Printf("sub() <<<\n")
}