Привет, ребята, я перехожу из Python3 в Go, поэтому я пытаюсь переписать библиотеку, созданную для повышения производительности.
я столкнулся с проблемой из-за того, что я noob в Golang XD, я используюограниченный API для загрузки сотен jsons, и я хочу использовать как можно меньше запросов, когда могу.поэтому при загрузке этих файлов jsons некоторые из используемых URL дублируются, и первая идея, которую я получил, - передать карту [stringLink] * myJsonReceived между моими функциями загрузки (goroutines) и каждой goroutine перед загрузкой проверяет, обрабатывается ли ссылка другой.поэтому вместо того, чтобы запрашивать его снова и тратить впустую вызовы Bandwidth + API, ему следует просто подождать, пока другая программа завершит его загрузку и получить его из словаря.
У меня есть несколько вариантов:
1) программа должна проверить, находится ли ссылка на карте, если это так, она проверяет каждые 0,05 секунды, если указатель в словаре все еще равен нулю или содержит json.(вероятно, самый плохой способ, но это работает)
2) изменить карту, переданную между goroutines, на (map [stringlink] chan myjson), это, вероятно, самый эффективный способ, но я понятия не имею, как отправить одно сообщениеканал и получить его несколькими ожидающими Goroutines.
3) я могу использовать Option (2), добавив в структуру счетчик, и каждый раз, когда программа обнаруживает, что URL-адрес уже запрошен, он просто добавляет +1 к счетчику и ждите ответа от канала, когда загрузка программы завершится, он отправит X сообщений на канал.но этот способ заставит меня добавить слишком много блокировок на карту, что является пустой тратой производительности.
Примечание: мне нужна карта в конце выполнения всех функций, чтобы сохранить загруженные Jsons в мою базу данных, чтобы никогда не загружатьих снова.
Спасибо всем заранее за вашу помощь.