170 похожих чатов

Я сейчас реализовую event emitter на голанге я недавно начал учить

го и пока неуверенно чувствую себя в горутинах
Такс, вот ситуация: мы навешиваем на событие слушателей как синхронные, так и нет
при эмите мы диспатчим слушателей, что на нашем событие висят
сейчас я реализовал, что при навешивании слушателя, последний парам отвечает синхронная ли операция
ee.On("event", handler1, true)
ee.On("event", handler2, false)
а в функции emit мы чекаем этот bool и если тру, то диспатчим горутиной, если нет то простой вызов
func asyncWrapper(f AnyListener, name string, data []interface{}, wg *sync.WaitGroup) {
defer wg.Done()
f(name, data...)
}

......................................................

var wg sync.WaitGroup
for _, listener := range ee.Events[name] {
if listener.async {
wg.Add(1)
go asyncWrapper(listener.listener, name, data, &wg)
continue
} else {
listener.listener(name, data...)
}
}
wg.Wait()
норм ли это способ диспатчить слушателей? где то я видел как на гите диспатчили всех слушателей через горутины независимо синхронная операция или нет, а мне кажется запускать отдельные треды(хоть они и легковесны) для синхронных операций не очень реализация

3 ответов

15 просмотров

1. В go нет тредов 2. В go нет асинхронных операций

А зачем разделение на sync/async ?

On(eventName string) (<-chan Data, error) вот так должен выглядеть ваш регистратор обработчика

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта