Я разрабатываю пакет, где я хочу предоставить API, основанный на шаблоне наблюдателя: то есть есть точки, где я бы хотел испустить сигнал, который вызовет нулевые или более заинтересованные стороны. Эти заинтересованные стороны не обязательно должны знать друг о друге.
Я знаю, что могу реализовать API как это с нуля (например, используя набор каналов или функции обратного вызова), но задавался вопросом, был ли предпочтительный способ структурирования таких API.
Во многих языках или фреймворках, с которыми я играл, существуют стандартные способы создания этих API-интерфейсов, чтобы они вели себя так, как ожидают пользователи: например. функции g_signal_*
для glib-приложений, событий и addEventListener()
для приложений DOM для JavaScript или многоадресных делегатов для .NET.
Есть ли что-то похожее для Go? Если нет, есть ли другой способ структурирования этого типа API, который более идиоматичен в Go?