Как лучше собирать данные из нескольких потоков, для последующей отправки клиенту?
Есть порядка 40 функций разбитых логически на пакеты, каждый пакет работает в отдельном потоке, так же в отдельном потоке работает вебсервер для реализации GUI(простой клиент на вебсокете). Функции очень простые - для работы с файловой системой (проверка существования файлов, копирование файлов, переименование и т.д.).
Проблема заключается в том, что каждая функция передаёт клиенту достаточно много информации разного типа. Сейчас передача реализована в виде костыля из большой структуры, которая заполняется по таймеру данными из каждой функции и в дальнейшем отправляется клиенту.
Скорее всего, есть какие-то готовые решения или паттерны для данной задачи. Но к сожалению найти решения пока не могу, возможно кто-то решал подобную задачу?
Зачем ва Go, если вы не поняли его основную парадигму "share by communication"?
Вам тут, из того, что я понял, определённо нужны каналы. Потому что много потоков + одна структура + заполнение по таймеру навевает мысли что творится полный пихжну.
Опишите задачу получше.
Сейчас передача реализована в виде костыля из большой структуры, которая заполняется по таймеру данными из каждой функции и в дальнейшем отправляется клиенту.
Почему это костыль?
Если клиенту все эти данные нужны только сразу - то большая структура вам нужна. Никуда вы не денетесь.
Единственно, что если вы хотите как-то эффективнее распараллелить это дело то лучше писать в структуру не по таймеру, а ждать данные из разных каналов в точке сбора структуры.