Что делает runtime.KeepAlive и в каких случаях она необходима?

runtime.KeepAlive гарантирует достижимость объекта до указанной точки, чтобы финализатор не освободил связанный ресурс слишком рано. Это не блокировка и не фиксация адреса.

Короткий ответ

Что ответить на собеседовании

runtime.KeepAlive гарантирует достижимость объекта до указанной точки, чтобы финализатор не освободил связанный ресурс слишком рано. Это не блокировка и не фиксация адреса.

Подробный разбор

Ответ с пояснениями

runtime.KeepAlive гарантирует достижимость объекта до указанной точки, чтобы финализатор не освободил связанный ресурс слишком рано. Это не блокировка и не фиксация адреса.

Типичный случай — Go-объект владеет файловым дескриптором, а в системный вызов передаётся только его числовое значение. KeepAlive после последнего использования ресурса удерживает владельца до этой точки. Он не защищает от явного Close из другой горутины и не делает произвольные преобразования unsafe.Pointer/uintptr корректными. Используйте его только при понятном контракте времени жизни.

Источник: go.dev.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее