我想实现以下内容:
我们的要求是必须对特定密钥的处理进行序列化。例如例行程序1正在处理与Key:1234
相关的数据,那么在例行程序1进行其工作之前,其他例行程序不应处理同一密钥的其他数据。
有人可以建议最好的方法吗?
答案 0 :(得分:0)
我正在使用map [Key] chan状态图来存储Key到Channel的映射。为每个Key创建Go例程。
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:
}
}
}