Замыкание - функция, которая ссылается на переменные из внешней области видимости. Переменные захватываются по ссылке. Частая ловушка - замыкание в цикле до Go 1.22 захватывало одну переменную цикла; с 1.22 у каждой итерации своя переменная.
func makeAdder(n int) func(int) int {
return func(x int) int { return n + x }
}
add2 := makeAdder(2)
add2(3) // 5