36 lines
574 B
Go
36 lines
574 B
Go
package service
|
|
|
|
import (
|
|
"net/http"
|
|
"sync"
|
|
)
|
|
|
|
var (
|
|
mu sync.Mutex
|
|
registry = make(map[string]http.Handler)
|
|
)
|
|
|
|
func Register(name string, handler http.Handler) {
|
|
mu.Lock()
|
|
defer mu.Unlock()
|
|
|
|
if _, ok := registry[name]; ok {
|
|
panic("service " + name + " already registered")
|
|
}
|
|
|
|
registry[name] = handler
|
|
}
|
|
|
|
func Handler() http.Handler {
|
|
mux := http.NewServeMux()
|
|
|
|
for name, h := range registry {
|
|
// e.g. "/homes/foo"
|
|
prefix := "/" + name
|
|
|
|
// strip "/homes/foo" then hand off to h
|
|
mux.Handle(prefix+"/", http.StripPrefix(prefix, h))
|
|
}
|
|
|
|
return mux
|
|
}
|