Назад к вопросам
Middle
104
questionbank
Что такое замыкание (closure) в Go и каков принцип его работы?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Замыкание в Go — это функция, которая "помнит" значение переменных из окружающего её лексического окружения, даже после того, как это окружение перестало существовать.
Принцип работы следующий:
- Когда замыкание создаётся (например, внутри другой функции), оно захватывает ссылки на переменные из области видимости, где оно было объявлено.
- Эти захваченные переменные живут до тех пор, пока живет замыкание, даже если функция, в которой они были объявлены, уже завершила работу.
- При каждом вызове замыкания оно может обращаться к этим захваченным переменным и изменять их.
Пример:
package main
import "fmt"
func makeCounter() func() int {
count := 0 // Переменная из внешнего окружения
return func() int { // Это замыкание
count++ // Оно обращается к `count` и изменяет её
return count
}
}
func main() {
counter1 := makeCounter()
fmt.Println(counter1()) // Выведет 1
fmt.Println(counter1()) // Выведет 2
counter2 := makeCounter() // Создаём новое замыкание со своим `count`
fmt.Println(counter2()) // Выведет 1
}
В этом примере функция makeCounter возвращает функцию (замыкание). Это замыкание "захватывает" переменную count. Каждый вызов возвращенной функции увеличивает значение count, принадлежащее этому конкретному экземпляру замыкания.