tgoop.com/go_interview_lib/363
Create:
Last Update:
Last Update:
💬 Как можно оптимизировать многократные вызовы одной и той же функции в Go, чтобы избежать выполнения одной и той же работы несколько раз?
Можно использовать пакет singleflight. Он гарантирует, что независимо от того, сколько раз вызывается функция в один и тот же период, она будет выполнена только один раз, и результат этого вызова будет возвращен всем вызывающим.
📌 Пример использования:
var group singleflight.Group
func UsingSingleFlight(key string) {
v, _, _ := group.Do(key, func() (any, error) {
return FetchExpensiveData()
})
fmt.Println(v)
}
В этом примере
singleflight.Group
оборачивает вызов функции внутри метода group.Do()
, который проверяет, был ли тот же ключ уже запрошен. Если да, он ждет результата первоначального вызова и возвращает его всем вызывающим.Основное преимущество использования
singleflight
заключается в том, что он предотвращает многократное выполнение одной и той же работы, что особенно полезно для ресурсоемких операций или операций, которые нельзя выполнять одновременно (например, ping()
на сервер). В отличие от кеша, singleflight
не только сохраняет результаты, а также координирует выполнение функции.BY Библиотека Go для собеса | вопросы с собеседований
Share with your friend now:
tgoop.com/go_interview_lib/363