Замыкания = универсальность
В языке Go замыкания используются повсеместно, давая возможность гибко решать разные задачи, используя один и тот же механизм.
Например, рассмотрим работу с картой в пакете sync — sync.Map:
Для итерации по карте есть метод Range с сигнатурой:
Но что, если нам нужно, например, посчитать сумму всех значений карты? Кажется, метод Range напрямую не позволяет этого сделать. Однако, благодаря замыканиям, мы можем обойти это ограничение:
Анонимная функция, передаваемая в Range, использует внешнюю переменную sum как накопитель. Таким образом, не изменяя сигнатуру метода, можно добиться нужного поведения.
Замыкания дают мощный инструмент для гибкости в коде.
👉 @juniorGolang
В языке Go замыкания используются повсеместно, давая возможность гибко решать разные задачи, используя один и тот же механизм.
Например, рассмотрим работу с картой в пакете sync — sync.Map:
var m sync.Map
m.Store("john", 21)
m.Store("maria", 25)
m.Store("steve", 29)
Для итерации по карте есть метод Range с сигнатурой:
Range(f func(key, value any) bool)
Но что, если нам нужно, например, посчитать сумму всех значений карты? Кажется, метод Range напрямую не позволяет этого сделать. Однако, благодаря замыканиям, мы можем обойти это ограничение:
sum := 0
m.Range(func(key, value any) bool {
sum += value.(int)
return true
})
Анонимная функция, передаваемая в Range, использует внешнюю переменную sum как накопитель. Таким образом, не изменяя сигнатуру метода, можно добиться нужного поведения.
Замыкания дают мощный инструмент для гибкости в коде.