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 ответов

11 просмотров

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

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

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

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

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

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
11
А чем вам питонисты не угодили?😂
.
79
Хтось використовував Vapor на Windows?
Jaroshevskii
15
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
Тут кста кто-нибудь NeoVim использует?
Simple Sorcerer
13
Какое виндузовое сообщение приходит TTabSheet, что риэлайняться контролы на нем, даже у которых парент другой? Ситуация: открываю форму - кнопок нет, перелистываю на другой т...
Катерина Свиридова
7
Карта сайта