Я пытаюсь правильно структурировать довольно большой процесс в Go.Я сделал это таким образом, чтобы это заняло несколько секунд, а не минут на другом языке;однако я не уверен, что делаю это правильно в идиоматическом смысле.
Вот общий обзор процесса:
Процесс 1 - Основной
- Получение токена из удаленного API (не одновременный)
- Список всех идентификаторов основных ресурсов из API (не одновременный)
- Для каждого идентификатора ресурса запускается Процесс 2
- Отображение результатов в журналах / CLI
Процесс 2 - Данные уровня 2
- Поиск идентификатора ресурса второго уровнясписок на основе входящего родительского идентификатора
- Для каждого идентификатора ресурса запускается процесс 3
процесс 3 - данные уровня 3
- Поиск данных, соответствующих определенному термину для содержимого объекта уровня 2
- Для каждого термина ищите его дескриптор и собирайте конкретные сведения
- Агрегируйте результаты
То, что я сделал до сих пор, - это WaitGroup
для Процесс 2 и Процесс 3 .
Мой процесс верхнего уровняss выглядит примерно так:
tier2Ids := getTier2IdSlice()
results := &MyResultStruct{}
waitGroup.Add(len(tier2Ids))
for _, id := range tier2Ids {
go inspectTier2(id, results, &waitGroup)
}
waitGroup.Wait()
Я передаю указатель на результаты, и пока программа обновляет данные там.Если я рефакторинг, я это исправлю.Исходя из другого языка, это имеет смысл для меня и прекрасно работает, но что-то не так в Go.
Есть ли более идиоматический подход, который я могу использовать?