Я использую карту [Key] chan State Map для хранения сопоставления для Key to Channel. Создание процедуры Go для каждого Key.
var keymap sync.Map
func handle_webservice(req WebReq) {
val, ok := keymap.Load(req.Key)
if ok {
val1, _ := val.(chan Event)
val1 <- Event{Data: req}
} else {
ch := make(chan Event, 5)
go Worker(ch)
keymap.Store(req.Key, ch)
ch <- Event{Source: WEBSERVICE, Data: req}
}
func sendToWorker(event Event) {
val, ok := keymap.Load(event.Key)
if ok {
val1, _ := val.(chan Event)
select {
case val1 <- event:
default:
}
}
}